【问题标题】:Should I add a property in domain model just for entity framework?我应该为实体框架在域模型中添加一个属性吗?
【发布时间】:2011-06-05 10:49:57
【问题描述】:

我正在尝试综合我一直在阅读的有关领域驱动设计和实体框架模型优先功能的内容。我有一个现有的数据库,但我在创建域模型时忽略了它。我最终得到了一个 Company 类和一个 Person 类。在模型中,我不需要两个类之间的关系。但是,我确实需要一种方法来获取公司人员的名单。我决定在我的 PersonRepository 上有一个 GetPeople(int companyId) 方法,这样我就不必有一个 Company 实例来获取这个列表。类如下所示:

公司类
整数 ID
字符串名称

人员类
整数 ID
字符串名字
字符串姓氏

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 而不是不正确的侵入?

【问题讨论】:

    标签: c# entity-framework domain-driven-design


    【解决方案1】:

    取决于你需要完成什么......

    您可以添加将公司 ID 和人员 ID 联系在一起的员工表/对象。

    您可以通过它获取特定公司的员工,或获取特定人员工作的公司。

    【讨论】:

    • 我已经在 Person 表(但不是类)中有一个 CompanyId,因此它们在数据库中绑定在一起。只是 EF 不知道,因为 Person 类上没有 CompanyId。
    • 根据您的说法,CompanyId 是 Person 的属性,因此应该反映在 Person 对象中。您可以添加一个Employees 对象,该对象结合了两者的ID 并管理CompanyEmployees 或PersonWorksFor 的查找。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多