c# - 自动检索实体框架外键关系模型
问题描述
我正在开发餐厅应用程序。我有一个餐厅模型和一个餐桌模型。
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; }
}
}
以下是 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 的关系以识别它。我试图在网上查看如何做到这一点,咨询有关设置外键关系的指南等。由于缺乏基本知识,我无法找到我正在寻找的信息。我能找到的答案对我来说没有意义,因为我不明白他们在做什么或他们是如何做的。
谁能指出我正确的方向或告诉我我做错了什么?
解决方案
将关系添加到您的类
[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
删除旧的迁移文件夹并干净迁移到 db
在此之后,您可以尝试此代码进行测试
var restourant= context.Restourants.Include(r=> r.Tables).FirstOrDefault(r=>r.Id==id);
它应该返回一个带有表格列表的餐厅
推荐阅读
- python - 使用 Selenium 在网页上查找“登录”按钮
- apache-spark - pyspark 使用用户指定的模式读取 csv - 返回所有 StringType
- react-navigation - 没有参数的 goBack() 和 pop() 在功能上是否相同?
- php - 需要帮助将 SQL 查询转换为 Prepared Statement
- r - 如何使用 R 中的 seededlda 包来保留主题的用户标识
- r - 在R中的列表中对数据框进行排序
- javascript - 如何在 javascript 代码中禁用 js 文件?
- angular - Angular CDK 拖放 - 对齐网格
- python - 如何根据前一个值和下一个值向 Pandas 数据框插入行?
- android - 获取谷歌地图准确位置