实体框架代码首先:导航属性初始化最佳实践
>>使用实体框架代码开发通常会引发有关您普通的旧CLR对象(POCOS)中导航属性初始化的问题。 有些人主张将这些属性保持非专业化,而另一些人则建议构造函数初始化。 本文阐明了最佳方法。
收集导航属性:初始化通常不必要 对于收集属性(例如,
),初始化几乎没有增加业务逻辑。 初始化一个空集合不会固有地创建实体关联。 因此,初始化在很大程度上是编码样式的问题。
IList<Order>
懒惰的初始化可以防止零参考异常并简化测试。相反,使用自动实施属性而不初始化的属性最小化样板代码,并利用C#的无效操作员。 但是,请注意,通过显式加载,初始化的集合可能会使确定实体框架是否加载数据复杂。
参考导航属性:避免初始化
> 初始化参考导航属性(例如,)是强烈劝阻的。 分配默认值(如新的,空对象)可能导致不可预测的行为。
如果在构造函数中初始初始化,则实体框架不会在对象实现或懒惰加载过程中覆盖这些值。 这可能会导致保存空的实体或破坏关系管理。
Customer
>实体框架核心(版本2.1及以后)处理关系修复程序的处理方式不同,并且不会直接受初始化参考属性的影响,但懒惰加载仍然不会覆盖它们。 此外,初始化可能会干扰的查询和播种。
Include
推荐HasData
对于最佳实体框架代码第一开发,请避免完全初始化参考导航属性。 对于收集导航属性,根据个人喜好和项目需求,初始化是可选的,但通常不必要。 这种方法确保了实体框架版本之间可预测的行为和兼容性。
以上是EF CodeFirst Navigation属性:初始化还是不初始化?的详细内容。更多信息请关注PHP中文网其他相关文章!