关于实体框架:EF Code First – 模型,何时应该在构造函数中实例化属性?

EF Code First - Models , when should properties be instantiated in constructor?

我想知道在某个地方是否有一个很好的解释来解释什么时候需要实例化一个属性在模型类构造函数中,什么时候不需要?

微软英孚网站上的文档是很好的,涵盖了很多相关的主题。

关系和导航属性-http://msdn.microsoft.com/en-us/data/jj713564使用API配置关系http://msdn.microsoft.com/en-us/data/jj591620%20%22使用%20API配置%20Relationships%20

实体框架类库http://msdn.microsoft.com/en-us/library/hh289362%28v=vs.103%29.aspx

我还部分读完了Julia Lerman的《编程实体框架——代码》一书。

我想更好地理解何时需要在模型构造函数中实例化属性。我在MS文档和书中看到了在模型构造函数中包含或不包含新属性的示例。There is most likely a good reason why some solutions use a constructor with newed Up objects and others not.似乎Virtual ICollectionnew List<>,复合型有new RefObj。但是modelobject类型的简单virtual navigation property没有新的就可以了。

我能坚持一个模式而不知道每个约定类的内部结构吗?还是我应该读另一个主题?


您不需要在模型构造函数中实例化一个属性,以便ef工作,但这样做更方便。

例如,如果您有一个类顺序,并且它有一个订单详细信息的子项,并且您希望向数据库中添加一个新的订单。

不初始化订单详细信息

1
2
var order = new Order();
order.OrderDetails.Add(new OrderDetail()); // this would error because OrderDetails is null

一个选项可以是调用order.orderDetails=new list();在您使用add()之前,但是您需要在您想要使用add()的任何地方重复该代码。相反,您可以将该代码放入构造函数中,然后orderdetails将可以用于所有新创建的订单。