Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否应该仅为实体框架在域模型中添加属性?_C#_Entity Framework_Domain Driven Design - Fatal编程技术网

C# 我是否应该仅为实体框架在域模型中添加属性?

C# 我是否应该仅为实体框架在域模型中添加属性?,c#,entity-framework,domain-driven-design,C#,Entity Framework,Domain Driven Design,我试图综合我所读到的关于领域驱动设计和实体框架模型优先功能的内容。我有一个现有的数据库,但在创建域模型时忽略了它。最后我上了公司课和个人课。在模型中,我不需要两个类之间的关系。然而,我确实需要一种方法来获取公司人员的名单。我决定在PersonRepository上有一个GetPeople(int companyId)方法,这样我就不必有一个公司实例来获取这个列表。这些类如下所示: 公司级 int Id 字符串名 个人类别 int Id 字符串名 字符串姓氏 PersonRepository IE

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

公司级
int Id
字符串名

个人类别
int Id
字符串名
字符串姓氏

PersonRepository
IEnumerable
GetPeople(int companyId){?}

现在转到数据库/EF部分。在数据库中,我有一个基本的外键关系,所以表看起来就像上面的类一样,只是Persons表也有一个CompanyId字段

因为我没有在域模型中添加任何对这个数据库关系的引用,EF不知道这些类是相关的,所以当我去写GetPeople方法时,我不能这样做

public IEnumerable<Person> GetPeople(int companyId) {
   return MyDbContext.Persons.Where(c => c.CompanyId == companyId);
}
public IEnumerable GetPeople(int companyId){
返回MyDbContext.Persons.Where(c=>c.CompanyId==CompanyId);
}
…因为域模型中的Person类上没有CompanyId属性。我总是可以添加这个属性,但是持久性机制现在正在影响我的域模型,这似乎是使用模型优先方法要避免的


添加该属性是否会对域模型造成不正确的入侵,还是因为它仍然只是一个POCO而不是不正确的入侵?

取决于您需要完成的任务

您可以添加将公司ID和个人ID绑定在一起的Employees表/对象


这样,您可以获取特定公司的员工,或者获取特定人员为之工作的公司。

我已经在Person表(但不是类)中获得了CompanyId,因此这些ID在数据库中绑定在一起。只是EF不知道,因为Person类上没有CompanyId。根据您的语句,CompanyId是Person的属性,所以应该反映在Person对象中。您可以添加一个Employees对象,该对象结合了两者的ID并管理CompanyEmployees或PersonWorksFor的查找。