自动检索实体框架外键关系模型
Posted
技术标签:
【中文标题】自动检索实体框架外键关系模型【英文标题】:Retrieve Entity Framework Foreign Key Relationship Models automatically 【发布时间】:2021-12-20 14:13:24 【问题描述】:我正在开发一个餐厅应用程序。我有一个餐厅模型和一个餐桌模型。
namespace Restaurant.Models
[Table("Restaurant")]
public class RestaurantModel
[Key]
[Column("id")]
public int Id get; set;
[Column("name")]
public string Name get; set;
[Column("telephone_number")]
public int TelephoneNumber get; set;
[NotMapped]
public List<TableModel> Tables;
public RestaurantModel()
Tables = new List<TableModel>();
namespace Restaurant.Models
[Table("Table")]
public class TableModel
[Key]
[Column("id")]
public int Id get; set;
[ForeignKey("restaurant_id")]
[Required] [NotNull]
public int RestaurantId get; set;
[Column("available_seats")]
public int AvailableSeats get; set;
[Column("is_indoors")]
public bool IsIndoors get; set;
我在 Restaurant 和 Table 之间存在依赖关系:
以下是 Entity Framework 通过我的上下文为我创建的列和键:
最后,这是我的 Context 类:
namespace Restaurant.Data
public class RestaurantContext : DbContext
public RestaurantContext(DbContextOptions<RestaurantContext> options) : base(options)
public DbSet<RestaurantModel> Restaurants get; set;
public DbSet<TableModel> Tables get; set;
public DbSet<GuestModel> Guests get; set;
protected override void OnModelCreating(ModelBuilder modelBuilder)
modelBuilder.Entity<RestaurantModel>().ToTable("Restaurant");
modelBuilder.Entity<TableModel>().ToTable("Table");
modelBuilder.Entity<GuestModel>().ToTable("Guest");
modelBuilder.Entity<TableModel>()
.HasOne<RestaurantModel>();
当我检索餐厅时,我希望在 TableModel 列表中检索相应的表。目前,当我检索餐厅时,它不会检索任何相应的表格。这对我来说很有意义,因为我没有正确连接 EntityFramework 的关系以识别它。我试图在网上查看如何做到这一点,咨询有关设置外键关系的指南等。由于缺乏基本知识,我无法找到我正在寻找的信息。我能找到的答案对我来说没有意义,因为我不明白他们在做什么或他们是如何做到的。
谁能指出我正确的方向或告诉我我做错了什么?
【问题讨论】:
你用的是什么ef版本和net版本? @Serge Net 5.0 和 EF 5.0.11 如果您使用的是 .NET 5.0 (= .NET "Core" 5.0) - 您可能会使用 EF CORE v5。 0.11 - 对吧?? 【参考方案1】:为你的类添加关系
[Table("Restaurant")]
public class Restaurant
[Key]
[Column("id")]
public int Id get; set;
[Column("name")]
public string Name get; set;
[Column("telephone_number")]
public int TelephoneNumber get; set;
public virtual ICollection<Table> Tables get; set;
[Table("Table")]
public class Table
[Key]
[Column("id")]
public int Id get; set;
public int? RestaurantId get; set;
public virtual Restourant Restaurant get; set;
[Column("available_seats")]
public int AvailableSeats get; set;
[Column("is_indoors")]
public bool IsIndoors get; set;
由于您使用的是 Net core 5+,我认为您没有任何导航属性或流畅的 API
删除旧的迁移文件夹并干净迁移到数据库
之后你可以试试这段代码进行测试
var restourant= context.Restourants.Include(r=> r.Tables).FirstOrDefault(r=>r.Id==id);
它应该返回一个带有表格列表的餐厅
【讨论】:
你好 Serge,我试过你的答案。我无法将“虚拟”关键字添加到餐厅类中的 ICollection以上是关于自动检索实体框架外键关系模型的主要内容,如果未能解决你的问题,请参考以下文章
在 Hibernate 中,如何自动检索父 id 并在子插入中将其用作外键?