1
A
回答
2
This is a good place to start.就算他是如此的特定職位可能看起來有點偏的NHibernate的主要貢獻者之一,但也有在評論一些良好的聯繫和參數。
看起來像幾個月前有人問SO一個非常類似的問題。
1
無法使用專用支持字段進行延遲加載集合。例如藉此類:
public class Account
{
private IList<Customer> _customers = new List<Customer>();
public IEnumerable<Customer> Customers
{
get { return _customers ; }
}
public void AddCustomer(Customer customer)
{
//Perform some biz rules
_customers.Add(customer)
}
}
訪問客戶集合是通過使用IEnumerable集合,並且具有對類AddCustomer/RemoveCustomer方法的限制。通常,在添加或刪除新客戶之前,您需要進行一些業務檢查。
當前版本的EF需要延遲加載集合類型爲ICollection(或任何實現ICollection的類型)。所以上面的類現在看起來像:
public class Account
{
private IList<Customer> _customers = new List<Customer>();
public virtual ICollection<Customer> Customers
{
get { return _customers ; }
}
public void AddCustomer(Customer customer)
{
//Perform some biz rules
_customers.Add(customer)
}
}
使用公共ICollection的客戶完全破壞良好的面向對象設計原則,因爲消費者可以直接通過調用ICollection的添加操作訪問。
Account acc = new Account();
acc.Customers.Add(new Customer()); //Bad code
域類的初衷是爲了使用公共add方法:
Account acc = new Account();
acc.AddCustomer(new Customer());
NHibernate的可以通過配置處理這種情況。我非常希望在EF中看到這種情況。
不過請注意有通過聲明支持字段的這一限制一個替代方案來保護,並通過配置映射它:
public class Account
{
protected virtual ICollection<Customer> _customers = new Collection<Customer>();
public IEnumerable<Customer> Customers
{
get { return _customers ; }
}
public void AddCustomer(Customer customer)
{
//Perform some biz rules
_customers.Add(customer)
}
}
但是如果你的應用程序有一個分層這是不行的架構(即您的域模型與EF配置類分開),因爲受保護的類型不能被外部類訪問。
爲了使這個工作需要EF類與您的域模型在同一個程序集中!
水清裝載收藏需要一個公共或受保護類型實現ICollection的。
相關問題
- 1. 什麼是EF4中的ObjectStateManager
- 2. PerlNet的限制是什麼?
- 3. 什麼是主要屬性?
- 4. 什麼是「主要表達」?
- 5. 製作課堂摘要的主要優勢是什麼
- 6. 什麼是Azure DocumentDB限制?
- 7. 什麼是HSQLDB限制?
- 8. AADSTS90009的主要原因是什麼?
- 9. NinjectServiceHost類的主要用途是什麼?
- 10. 什麼是主要的方式豚
- 11. AFNetworking主要的ASIHTTPRequest功能是什麼?
- 12. Apache Ignite的主要想法是什麼?
- 13. Haskell的主要特性是什麼?
- 14. ASP.NET Webforms的主要優勢是什麼?
- 15. 什麼是BCrypt的主要C/C++庫?
- 16. 什麼是主要用於控制檯的應用程序?
- 17. NHibernate中版本控制功能的主要優點是什麼?
- 18. 什麼是電子郵件主題長度限制?
- 19. 什麼是Android APK大小限制(不是市場限制)?
- 20. dart編譯javascript的限制是什麼?
- 21. 什麼是IIS 6.0的限制
- 22. 什麼是codepad.org的Perl runner限制?
- 23. IdeaBlade的一些限制是什麼?
- 24. 什麼是並排COM的限制?
- 25. github.com的存儲庫限制是什麼
- 26. 限制單子的現狀是什麼?
- 27. 網絡的顏色限制是什麼?
- 28. 谷歌音譯的限制是什麼?
- 29. apache鑽取的限制是什麼?
- 30. WCF的內部限制是什麼WCF
它應該使用「內部」,以及只將集合暴露給同一程序集中的其他類。 – 2011-03-22 19:23:09