对于我们的许多实体(数据库表),我们在代码中设置默认值,每当构造实体时就会执行。在Linq2Sql中很容易实现:为实体定义一个部分类,并添加如下所示的类中的方法:
partial void OnCreated() { SomeProperty = SomeDefaultValue; }
每当Linq2Sql构造新的实体对象时,它会调用你定义的OnCreated()方法,并按预期设置默认值。这非常好用。
问题: 在EF中,我没有看到在Database First场景下实现这一点的方法。如果修改由EF生成的模型代码,则每当我们在数据库修订后更新模型时,模型代码都会被覆盖。
如果在单独的文件中为实体定义一个部分类并定义构造函数,则编译器会抱怨构造函数已经定义了。
也没有支持类似于L2S的OnCreated()方法的功能。
有什么建议吗?
编辑:感谢大家的有用评论,但我认为我需要指出一个重要的考虑因素:我的目标是使用“Database First”方法并坚持下去,而不是切换到“Code First”。随着数据库模式随时间改变,我希望EF Designer(或POCO Generator或任何其他工具)更新我的EF实体类以匹配。所有这些都不会丢失在应用程序中构造类属性时添加的内容。在Linq2Sql中很容易实现,但我只是看不到在EF数据库优先的情况下如何实现这一点。欢迎所有建议!
partial void OnCreated
。 - Ivan Stoev