gpt4 book ai didi

entity-framework - 为什么 Entity Framework 需要一个 ICollection 来进行延迟加载?

转载 作者:行者123 更新时间:2023-12-03 10:27:49 32 4
gpt4 key购买 nike

我想写一个丰富的领域类,如

public class Product    
{
public IEnumerable<Photo> Photos {get; private set;}
public void AddPhoto(){...}
public void RemovePhoto(){...}
}

但是 Entity Framework (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/

本质上,您希望 ICollection 类型受到保护并将其用作公共(public) 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 并且访问必须是公共(public)的或 protected 。

关于entity-framework - 为什么 Entity Framework 需要一个 ICollection 来进行延迟加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2866881/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com