2017-01-16 119 views
2

在实体框架中,默认值约束功能尚未实现,我自己试了一下,然后读了一下here。所以,我想知道得到这个的最好方法是什么。我应该使用存储过程还是触发类似的东西?在Entity Framework中哪些更好或者新增了什么,因为我不想在代码中明确地处理它。 这将是一个很大的帮助。实体框架和默认值

+0

我一直只是把默认值在实体的初始化。我知道这是你想避免的,但它的工作原理。 –

+0

在我的情况下,我的实体框架得到更新更频繁,我有一些表,所以我通常避免在这些生成的代码文件中进行任何更改。 –

+0

我不确定你是如何生成你的实体pocos的(基于你的评论上面,它听起来像你在做数据库第一)但大多数工具可以选择为你的实体创建部分类。然后,您可以创建部分类来执行实例实例化时需要执行的任何自定义逻辑。 Simon Hughes创建了一个工作得很好的工具 - https://marketplace.visualstudio.com/items?itemName=SimonHughes.EntityFrameworkReversePOCOGenerator –

回答

3

在数据库第一种方法中,实体框架忽略默认值约束。但实体框架显示列的默认值属性。在Model.edmx查看器中,选择一个实体 - >转到列 - >属性 - >默认值。添加列中的默认值,就是这样。

在我的情况下,我通过代码更新了Model.edmx文件。代码从Db获取默认约束,然后更新Model.edmx文件中的概念模型,因为我有大量的默认值列。

默认值约束问题仍然存在,在实体框架,直到EF6的所有版本,似乎在实体框架来解决7

+0

看起来你已经做了一些研究工作。竖起大拇指。 –

+0

@Wasim,你说过“通过代码更新Model.edmx文件”。你是怎么做到的? – Thomas

+0

@Thomas,在我的情况下,数据库不够大,无法编写代码脚本,所以我手动完成。 –

0

作为解决办法,我认为您可以使用数据库触发器将列值更新为默认值。

+0

谢谢@Behzad,我很欣赏你的建议。 –

+0

如果我无法从代码方得到解决方案,我一定会去这个选项。 –

3

最简单的方法是从C#初始化您的属性,从而确保默认值。

对于数据库首先,设计器忽略你的SQL默认值,你必须告诉它将你的列视为计算:选择你的实体 - >去列 - >属性 - >设置StoreGeneratedPattern为Computed(默认为None)

+0

我试过了,它工作。谢啦! –

+0

只想问一下,是否有任何方法可以为所有列设置此属性,因为当有多个表时它将会有所帮助。 –

+0

@ user7369792 - 检查[这个问题](http://stackoverflow.com/questions/12691854/setting-default-value-in-entity-framework-database-first) – Alexei