【发布时间】:2011-07-26 15:36:56
【问题描述】:
我有一个相当复杂的数据库,我想先将其映射到代码,但我遇到了一个需要拆分为两个单独类的表的问题。
表结构的基本示例如下:
Site
----
Id
Name
Person
------
Id
Name
Dob
Address
Rank
Age
SiteId
PersonRoleLink
--------------
PersonId
RoleId
Role
----
Id
Name
基本上,一个站点有很多人,每个人都可以担任多个角色。
根据该人的角色,取决于填充的属性。
理想情况下,我想要一个如下的类结构:
public class Site {
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Customer> Customers { get; set; }
public virtual ICollection<Employee> Employees { get; set; }
public virtual ICollection<Manager> Managers { get; set; }
}
public class PersonBase {
public int Id { get; set; }
public string Name { get; set; }
public virtual Site Site { get; set; }
}
public class Customer : PersonBase {
public string Name { get; set; }
public DateTime Dob { get; set; }
}
public class Employee: PersonBase {
public int Age { get; set; }
}
public class Manager: PersonBase {
public int Rank { get; set; }
}
其中Customer、Employee 和Manager 都来自Person 表,并且依赖于PersonRoleLink 表中的相关链接。
因此,当我调用 Site.Managers 之类的内容时,Person 表中返回的行是具有正确 SiteId 并带有指向名为“经理”的 Role 的链接的行
这种结构在代码中是否可行?如果是这样,这个映射是如何实现的?如果没有,这个结构是否有任何可行的替代方案?
谢谢
【问题讨论】:
标签: .net entity-framework ef-code-first code-first