我想编写一个丰富的域类,例如
public class Product
{
public IEnumerable<Photo> Photos {get; private set;}
public void AddPhoto(){...}
public void RemovePhoto(){...}
}
但是实体框架(V4代码优先方法)需要ICollection类型来延迟加载!上面的代码不再按设计工作,因为客户端可以绕过 AddPhoto / RemovePhoto 方法并直接调用 ICollection 上的 add 方法。不是很好。
public class Product
{
public ICollection<Photo> Photos {get; private set;} //Bad
public void AddPhoto(){...}
public void RemovePhoto(){...}
}
尝试使用 EF4 实现 DDD 确实令人沮丧。为什么他们选择 ICollection 进行延迟加载?
我怎样才能克服这个问题? NHibernate 能否为我提供更好的 DDD 体验?
我想我找到了解决方案...请参阅此处了解更多详细信息:http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/47296641-0426-49c2-b048-bf890c6d6af2/ http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/47296641-0426-49c2-b048-bf890c6d6af2/
本质上,您希望保护 ICollection 类型并将其用作公共 IEnumerable 的后备集合
public class Product
{
// This is a mapped property
protected virtual ICollection<Photo> _photos { get; set; }
// This is an un-mapped property that just wraps _photos
public IEnumerable<Photo> Photos
{
get { return _photos; }
}
public void AddPhoto(){...}
public void RemovePhoto(){...}
}
为了使延迟加载起作用,类型必须实现 ICollection,并且访问必须是公共的或受保护的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)