我正在尝试综合我一直在阅读的有关域驱动设计和实体框架模型优先功能的内容。我有一个现有的数据库,但在创建域模型时我忽略了它。我最终得到了一个公司类和一个Person类。在模型中,我不需要两个类之间的关系。但是,我确实需要一种方法来获取公司的人员列表。我决定在PersonRepository上有一个GetPeople(int companyId)方法,这样我就不必拥有一个Company实例来获取这个列表。这些类看起来像这样:
公司类
int Id
字符串名称
人员类
int Id
字符串FirstName
string LastName
PersonRepository
IEnumerable <Person>
GetPeople(int companyId){? }
现在到数据库/ EF部分。在数据库中,我有一个基本的外键关系,所以这些表看起来就像上面的类,除了Persons表还有一个CompanyId字段。
由于我没有在域模型中添加对此数据库关系的任何引用,因此EF不知道这些类是相关的,因此当我去编写GetPeople方法时,我不能这样做...
public IEnumerable<Person> GetPeople(int companyId) {
return MyDbContext.Persons.Where(c => c.CompanyId == companyId);
}
...因为域模型中的Person类没有CompanyId属性。我总是可以添加该属性,但是持久性机制现在正在影响我的域模型,这似乎是您希望使用模型优先方法避免的。
添加该属性是否会错误地侵入域模型,或者它是不是一种不正当的入侵,因为它仍然只是一个POCO?
答案 0 :(得分:0)
取决于您需要完成的任务......
您可以添加一个将公司ID和人员ID绑在一起的Employees表/对象。
通过这种方式,您可以获得特定公司的员工,或者获得特定人员工作的公司。