C# 保护列表不受不希望添加的实体框架的影响
我有一个对象,比如通常的C# 保护列表不受不希望添加的实体框架的影响,c#,entity-framework,domain-driven-design,C#,Entity Framework,Domain Driven Design,我有一个对象,比如通常的Order,它包含LineItem的集合。为了满足某些业务规则,我需要完全控制列表(即,没有人可以简单地使用内置的add()方法将元素添加到此列表)。所以我做了一些类似的事情: public class Order { private List<LineItem> lineItems {get; set;} public IEnumerable<LineItem> LineItems { get { return
Order
,它包含LineItem
的集合。为了满足某些业务规则,我需要完全控制列表(即,没有人可以简单地使用内置的add()
方法将元素添加到此列表)。所以我做了一些类似的事情:
public class Order {
private List<LineItem> lineItems {get; set;}
public IEnumerable<LineItem> LineItems {
get { return lineItems.AsReadOnly(); }
}
}
return Set.Include(s => s.LineItems)
public ICollection<LineItem> LineItems
{
get
{
return new ReadOnlyCollection<LineItem>(lineItems);
}
}
因为没有人设置了lineItems
(因为没有人是私有的),所以我得到了一个NullPointerException。
由于实体配置和域模型在不同的包中,使用内部
而不是私有
将无法解决问题,除非使用内部VisibleTo
(但我不想用持久性相关的东西破坏域模型的AssemblyInfo.cs)
如何解决这个问题
PS:EF配置和域模型位于不同的名称空间中。您可以执行以下操作:
public class Order {
private List<LineItem> lineItems {get; set;}
public IEnumerable<LineItem> LineItems {
get { return lineItems.AsReadOnly(); }
}
}
return Set.Include(s => s.LineItems)
public ICollection<LineItem> LineItems
{
get
{
return new ReadOnlyCollection<LineItem>(lineItems);
}
}
public i收集行项目
{
收到
{
返回新的只读集合(行项);
}
}
我不能做的可能重复返回集。包括(s=>s.Items)代码>因为lineItems
是null
而我得到了一个null!这是一个初始化/构造函数问题,而不是EF/映射问题。@Pieter21如何映射行项目
,同时使EF填充行项目
?我认为这行不通。