Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Entity framework EF代码第一个多重继承是独占的吗?_Entity Framework_Inheritance_Ef Code First - Fatal编程技术网

Entity framework EF代码第一个多重继承是独占的吗?

Entity framework EF代码第一个多重继承是独占的吗?,entity-framework,inheritance,ef-code-first,Entity Framework,Inheritance,Ef Code First,假设我有一个模型,其中我有一个Person实体,它具有一般信息(姓名、出生日期等),还有两个从Person继承的附加实体(客户、工人)。如您所见,可以选择让客户也可以在模型中扮演工人的角色。在EF中有一种设计方法(我看到了一些关于TPH、TPT和TPC的内容),但我看到使用了鉴别器,它不允许人员表“同时”包含工人和客户的值 我不知道我是否在继承的一般OOP概念上出错了:S 提前感谢您的帮助。您不能在.net中拥有多重继承,它不受支持(实体框架也不受支持)。您可以实现多个接口,但这是一个稍有不同的

假设我有一个模型,其中我有一个Person实体,它具有一般信息(姓名、出生日期等),还有两个从Person继承的附加实体(客户、工人)。如您所见,可以选择让客户也可以在模型中扮演工人的角色。在EF中有一种设计方法(我看到了一些关于TPH、TPT和TPC的内容),但我看到使用了鉴别器,它不允许人员表“同时”包含工人和客户的值

我不知道我是否在继承的一般OOP概念上出错了:S


提前感谢您的帮助。

您不能在.net中拥有多重继承,它不受支持(实体框架也不受支持)。您可以实现多个接口,但这是一个稍有不同的概念,即“Worker”可以是由某些对象实现的接口,例如customer

在实体框架中,我认为鉴别器仅在使用每个层次结构的表时实现。这两个子实体存储在同一个表中,鉴别器识别哪个是哪个

每种类型的表本质上是实体(个人、客户、工作人员)存储在不同的表中,但在代码中可以作为单个实体访问(即从个人继承的客户)

可能您需要创建一个接口(可能是IWorker),创建一个从Customer继承并实现IWorker的类(可能是WorkerCustomer??)

编辑:15/02/2013 19:00

好的,下面可能是您在单个表中表示数据的目的:

public class MyDbContext : DbContext
{
    public MyDbContext() : base("TestDB")
    {

    }

    public DbSet<Person> People { get; set; }
    public DbSet<Customer> Customers { get; set; }
    public DbSet<Worker> Workers { get; set; }
    public DbSet<WorkerCustomer> WorkerCustomers { get; set; }
}

public class Person
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class Customer : Person
{
    public string CustomerNumber { get; set; } 
}

public interface IWorker
{
    string WorkerNumber { get; set; }
}

public class Worker : Person, IWorker
{
    public string WorkerNumber { get; set; }
}

public class WorkerCustomer : Customer
{
    public string WorkerNumber { get; set; }
}
公共类MyDbContext:DbContext
{
public MyDbContext():base(“TestDB”)
{
}
公共数据库集人物{get;set;}
公共数据库集客户{get;set;}
公共数据库集工作程序{get;set;}
公共数据库集WorkerCustomers{get;set;}
}
公共阶层人士
{
公共int ID{get;set;}
公共字符串名称{get;set;}
}
公共类客户:个人
{
公共字符串CustomerNumber{get;set;}
}
公共接口IWorker
{
字符串WorkerNumber{get;set;}
}
公共类工人:个人,我的工人
{
公共字符串WorkerNumber{get;set;}
}
公共类Worker客户:客户
{
公共字符串WorkerNumber{get;set;}
}

但在这种情况下不存在多重继承,因为Worker只从Person继承,Customer也只从Person继承。对不起,我解释得不太清楚。也许我在定义实体时遇到了问题。谢谢你的帮助。我不是百分之百确定我知道你在找什么,但我已经用一个例子修改了我的答案,说明了你如何处理这个问题,并拥有一个像你提到的那样的表结构——我想!