Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF继承和主键_C#_Inheritance_Entity Framework 5 - Fatal编程技术网

C# EF继承和主键

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

我不确定这在EF中是否可行,但我正在创建一组类,并试图让EF为我创建表

现在EF创建我的表很好,除了一个小问题。它创建了以下表格:

人 -人格(PK)

福 -人格(PK) -FooId(INT)

便便 -人格(PK) -PooId(内部)

理想情况下,我希望表Foo和Poo中的PersonId是外键,而不是主键。这可能吗?已尝试使用ModelBuilder通过以下方式执行此操作:

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");