gpt4 book ai didi

entity-framework - 在 Entity Framework Code First 模型中链接两个表

转载 作者:行者123 更新时间:2023-12-02 05:41:36 34 4
gpt4 key购买 nike

我正在尝试通过转换我拥有的 Web 表单应用程序来学习 asp.net MVC。这是一个房间预订应用程序,其中有一个与 tblRental 具有一对多关系的客户表 (tblCustomerBooking) - 因此一个客户可以预订多个房间。相互匹配的字段是 tblCustomerBooking.customer_id -> tblRental.customer_ref

我尝试先使用代码 - 并构建模型类 - 但我不知道如何链接这两个表,因此当我查询 dbContext 时,它将返回一个客户,其中有一个或多个同一型号内的租金。

我的表定义是:

CREATE TABLE [dbo].[tblCustomerBooking](
[customer_id] [bigint] IDENTITY(1,1) NOT NULL,
[room_id] [bigint] NULL,
[customer_name] [varchar](110) NULL,
[customer_email] [varchar](50) NULL
CONSTRAINT [PK_tblCustomerBooking] PRIMARY KEY CLUSTERED
(
[customer_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

CREATE TABLE [dbo].[tblRental](
[rental_id] [bigint] IDENTITY(1,1) NOT NULL,
[room_id] [bigint] NOT NULL,
[check_in] [datetime] NOT NULL,
[check_out] [datetime] NOT NULL,
[customer_ref] [bigint] NULL,
[room_cost] [decimal](18, 2) NULL
CONSTRAINT [PK_tblRental_1] PRIMARY KEY CLUSTERED
([rental_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

我为此构建模型的尝试是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.Entity;

namespace MvcApplication23.Models
{
public class tblRental
{
[Key()]
public int rental_id { get; set; }
public int room_id { get; set; }
public DateTime check_in { get; set; }
public DateTime check_out { get; set; }
public long customer_ref { get; set; }
[ForeignKey("customer_ref")]
public tblCustomerBooking Customer {get;set;}
public decimal room_cost { get; set; }
}

public class tblCustomerBooking
{
[Key()]
public long customer_id { get; set; }
public string customer_name { get; set; }
public string customer_email { get; set; }
public ICollection<tblRental> Rentals {get;set;}
}

public class RentalContext : DbContext
{
public DbSet<tblCustomerBooking> customers { get; set; }
public DbSet<tblRental> rentals { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
}

Controller :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web.Http;
using MvcApplication23.Models;

namespace MvcApplication23.api.Controllers
{
public class RentalController : ApiController
{
private RentalContext db = new RentalContext();

// GET /api/rental/5
public IQueryable<tblCustomerBooking> Get(int id)
{
return db.customers.Include("rentals").FirstOrDefault(c=>c.customer_id==id);
}

** 我已经更新了上面的信息,使用数据库中已经存在的实际表名 **

如何链接模型中的两个表?然后给定一个 customer_id,我将如何查询 DbContext 以返回一个客户,以及 tblRental 表中的任何相关条目?

非常感谢您的指点,

标记

最佳答案

要链接两个实体,请提供导航属性:

public class Rental
{
[Key]
public int rental_id { get; set; }
public int room_id { get; set; }
public DateTime check_in { get; set; }
public DateTime check_out { get; set; }
public int customer_ref { get; set; }

[ForeignKey("customer_ref")]
public virtual Customer Customer {get;set;}

public decimal room_cost { get; set; }
}

public class Customer
{
[Key]
public int customer_id { get; set; }
public string customer_name { get; set; }
public string customer_email { get; set; }

public virtual ICollection<Rental> Rentals {get;set;}
}

并查询您的客户:

return this.DataContext.customers.Include("Rentals").FirstOrDefaul(c=>c.customer_id==customerId);

关于entity-framework - 在 Entity Framework Code First 模型中链接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10878979/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com