【问题标题】:EF Code First - Models , when should properties be instantiated in constructor?EF Code First - 模型,什么时候应该在构造函数中实例化属性?
【发布时间】:2012-11-09 18:52:13
【问题描述】:

我想知道某处是否有关于何时需要实例化属性的良好解释 在模型类构造函数中,什么时候不需要?

MS EF 网站上的文档很好,涵盖了很多相关主题

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

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

我也通过阅读书籍编程实体框架 - Julia Lerman 编写的 Code First

我想更好地了解何时需要在模型构造函数中实例化属性。
我在 MS 文档和书中看到了示例,在模型构造函数中有和没有新属性的情况下。 某些解决方案使用带有新的 Up 对象的构造函数而其他解决方案不使用,这很可能是有充分理由的。
好像Virtual ICollectionnew List<> 和复杂类型有new RefObj。 但是 ModelObject 类型的简单 virtual navigation property 没有 new 也可以。

我可以在不了解每个约定类的内部结构的情况下坚持一个模式吗?还是我应该阅读其他主题?

【问题讨论】:

    标签: entity-framework ef-code-first


    【解决方案1】:

    您永远不需要在模型构造函数中实例化一个属性以使 EF 工作,但这使它更方便。

    例如,如果您有一个 Order 类,并且它有 Order Detail 的子类,并且您想将一个新 Order 添加到您的数据库中。

    不初始化 OrderDetails

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

    一种选择是调用 order.OrderDetails = new List(); 在你使用 Add() 之前,但是你需要在你想使用 Add() 的任何地方重复该代码。相反,您可以将该代码放在构造函数中,然后 OrderDetails 将准备好与所有新创建的订单一起使用。

    【讨论】:

    • 所以这是一个风格/设计问题,而不是 EF 填充模型的内部要求。感谢您的反馈
    • 基于没有进一步的反馈或评论,我已将此标记为正确答案
    猜你喜欢
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多