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填充
行项目
?我认为这行不通。