Linq-to-entities:如何创建对象(new Xyz()vs CreateXyz())?

时间:2009-02-08 16:35:24

标签: entity-framework

在实体框架中添加新对象的最佳方法是什么。设计师添加了所有这些创建方法,但对我而言,在对象上调用new更有意义。生成的CreateCustomer方法,例如可以像这样调用:

Customer c = context.CreateCustomer(System.Guid.NewGuid(), "Name"));
context.AddToCustomer(c);

在我这里做的更有意义:

Customer c = new Customer {
    Id = System.Guid.NewGuid(),
    Name = "Name"
};
context.AddToCustomer(c);

后者更加明确,因为在构造中设置的属性被命名。我假设设计师故意添加创建方法。我为什么要用那些?

3 个答案:

答案 0 :(得分:5)

正如安德鲁所说(投票),使用常规构造函数是完全可以接受的。至于为什么存在“创建”方法,我相信的目的是明确需要哪些属性。如果你使用这样的方法,你可以放心,你没有忘记设置任何属性,当你SaveChanges时会抛出异常。但是,实体框架的代码生成器并没有完全正确;它还包括服务器生成的自动增量属性。这些在技术上是“必需的”,但您不需要指定它们。

答案 1 :(得分:2)

你绝对可以使用第二种更自然的方式。我甚至不确定为什么第一种方式存在。

答案 2 :(得分:0)

我想这与许多事情有关。对我来说它看起来像工厂方法,因此允许一个扩展点。在构造函数中使用所有这些并不是最佳实践,尤其是在初始化时执行大量操作时。是的,你的问题似乎是合理的,我甚至同意它,但是,在对象设计方面,它更实际,因为他们这样做。

此致 Marius C.(c_marius@msn.com)