C# EF继承和主键
我不确定这在EF中是否可行,但我正在创建一组类,并试图让EF为我创建表 现在EF创建我的表很好,除了一个小问题。它创建了以下表格: 人 -人格(PK) 福 -人格(PK) -FooId(INT) 便便 -人格(PK) -PooId(内部) 理想情况下,我希望表Foo和Poo中的PersonId是外键,而不是主键。这可能吗?已尝试使用ModelBuilder通过以下方式执行此操作:C# EF继承和主键,c#,inheritance,entity-framework-5,C#,Inheritance,Entity Framework 5,我不确定这在EF中是否可行,但我正在创建一组类,并试图让EF为我创建表 现在EF创建我的表很好,除了一个小问题。它创建了以下表格: 人 -人格(PK) 福 -人格(PK) -FooId(INT) 便便 -人格(PK) -PooId(内部) 理想情况下,我希望表Foo和Poo中的PersonId是外键,而不是主键。这可能吗?已尝试使用ModelBuilder通过以下方式执行此操作: modelBuilder.Entity<Foo>().HasKey(x => x.FooId).T
modelBuilder.Entity<Foo>().HasKey(x => x.FooId).ToTable("Foo");
public class Person
{
public int PersonId { get; private set; }
}
public class Foo : Person
{
public int FooId { get; private set; }
}
public class Poo : Person
{
public int PooId { get; private set; }
}
modelBuilder.Entity().HasKey(x=>x.FooId).ToTable(“Foo”);
公共阶层人士
{
public int PersonId{get;private set;}
}
公开课Foo:Person
{
public int FooId{get;private set;}
}
公共类公安:人
{
public int PooId{get;private set;}
}
实现继承的方式遵循“表-类型”方法,其中基类的PK是派生类的PK,并且也是返回基类的FK
您希望表Foo和Poo中的PersonId是外键,而不是主键,因此通过将配置更改为
modelBuilder.Entity<Foo>().HasKey(x => x.FooId).ToTable("Foo");
modelBuilder.Entity().HasKey(x=>x.FooId).ToTable(“Foo”);
到
modelBuilder.Entity().ToTable(“Foo”);
您的数据库应如下所示:
人物-人物(PK)
傅-人格(PK,FK)
便便-人形(PK,FK)
.那么是否可以将PersonId设置为仅作为FK,并将Foo表中的FooId设置为PK?是的,这是可能的。但在这种情况下,您应该手动创建数据库,并首先使用代码将实体映射到现有数据库。我不完全确定您想做的事情是否可以先使用代码来完成,@KirillBestemyanov的回答证实了这一点。看看这个链接,Ladislav解释了如何使用设计器映射TPT谢谢。我正在安装SP1并检查可用的建模工具。
modelBuilder.Entity<Foo>().ToTable("Foo");