0

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

我不知道我是否对继承的一般 OOP 概念有误:S。

提前感谢您的所有帮助。

4

1 回答 1

0

您不能在 .net 中进行多重继承,它不受支持(这同样适用于实体框架)。您可以实现多个接口,但这是一个稍微不同的概念 - 即“工人”可能是由某些对象(例如客户)实现的接口

在实体框架中,我相信只有在使用 Table-per-hierarchy 时才实现鉴别器。这是两个子实体存储在同一个表中的位置,鉴别器识别哪个是哪个。

Table-per-type 本质上是实体(person、customer、worker)存储在不同的表中,但可以作为代码中的单个实体访问(即继承自 person 的客户)

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

编辑:2013 年 2 月 15 日 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; }
}
于 2013-02-15T08:10:27.677 回答