gpt4 book ai didi

c# - EF DB 首次刷新未检测到特定表的 FK

转载 作者:太空狗 更新时间:2023-10-29 20:23:41 24 4
gpt4 key购买 nike

不确定我的设置发生了什么,但是最近,当我用具有特定表(Person)外键的新字段或新表更新我的数据库时,我的数据库刷新选择建立新字段,但不识别与 Person 的 FK 关系。大多数其他表的外键工作正常。

可能缺少什么设置?

也许是一条线索:Person 充当其他几个表的基本类型,例如Manager, Customer 等都具有姓名、出生日期、性别等基本特征,后代表有一个主键也充当外键到。与后代表的 FK 关系也未被识别。

最佳答案

在映射复杂的继承模型时, Entity Framework 可能相当有限。然而,在映射继承时,您基本上有三种选择:

TPH (每个层次结构的表)映射:此映射为层次结构中的所有字段生成一个表,并且将附加冲突或“同名”字段通过一个数字种子。例如Name1(人),Name2(经理)等

TPT (table-per-type) 映射:此映射为每个对象生成单独的表,但是冲突的属性名称仅映射到基类中。在您的实例中是 Person 类。注意:由于复杂的连接查询以及在某些情况下您遇到的异常情况,不鼓励使用 TPT

TPC (table-per-concrete-type) 映射:类似于 TPT,除了一个类的所有属性,包括继承的属性,映射到对应表

解决方案:

假设您正在使用 TPT,这意味着您继承的类成员没有被映射。我建议您查看 TPC 以生成映射和迁移。您将需要查看 EF 中的 Fluent API 以实现上述映射:

TPC 示例:

在您的 DbCContext 对象中声明:

 protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.Property(c => c.CourseID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

modelBuilder.Entity<Manager>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("Manager");
});

modelBuilder.Entity<Customer>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("Customer");
});
}

免责声明:在没有看到继承结构或执行的迁移的情况下很难确切知道您的问题是什么,但是我发现上面提到的 EF 关系中最常见的问题。

关于c# - EF DB 首次刷新未检测到特定表的 FK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30555230/

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