我試圖綜合我一直在讀的關於域驅動設計和實體框架模型的第一個功能。我有一個現有的數據庫,但我忽略了這一點,而我創建了我的域模型。我結束了一個公司類和一個Person類。在模型中,我不需要兩個類之間的關係。但是,我確實需要一種方法來獲取公司人員名單。我決定在我的PersonRepository上有一個GetPeople(int companyId)方法,這樣我就不必爲了得到這個列表而擁有一個公司實例。該班是這樣的:我應該在域模型中爲實體框架添加一個屬性嗎?
公司類
INT標識
字符串名稱
Person類
INT標識
串名字
串名字
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?
我已經在Person表中有一個CompanyId(但不是類),所以它們在數據庫中綁定在一起。這只是EF不知道的,因爲Person類沒有CompanyId。 – coulterps 2011-01-07 18:32:52