假设我有一个模型,其中我有Person实体,其中包含一般信息(名称,出生日期等),以及从Person继承的另外两个实体(Customer,Worker)。如您所见,可以选择让客户也可以在模型中扮演工人的角色。有一种方法可以在EF中设计这个(我看到了一些关于TPH,TPT和TPC的东西),但我发现有一个鉴别器的使用,它不允许Person表“同时”包含Worker和Customer的值。
我不知道是否我对继承的一般OOP概念出错:S。
提前感谢您的帮助。
答案 0 :(得分:0)
你不能在.net中有多重继承,它不受支持(同样适用于实体框架)。您可以实现多个接口,但这是一个略有不同的概念 - 即'Worker'可以是由某些对象实现的接口,例如客户
在实体框架中,我认为仅在使用Table-per-hierarchy时才实现鉴别器。这是两个子实体存储在同一个表中的位置,鉴别器标识哪个是。
每个类型的表基本上是实体(个人,客户,工人)存储在不同的表中,但可以作为代码中的单个实体(即具有人的继承的客户)访问
可能需要创建一个接口(可能是IWorker),并创建一个继承自Customer的类(可能是WorkerCustomer ??)并实现IWorker。
编辑: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; }
}