实体框架和默认值
在数据库第一种方法中,实体框架忽略默认值约束。但实体框架显示列的默认值属性。在Model.edmx查看器中,选择一个实体 - >转到列 - >属性 - >默认值。添加列中的默认值,就是这样。
在我的情况下,我通过代码更新了Model.edmx文件。代码从Db获取默认约束,然后更新Model.edmx文件中的概念模型,因为我有大量的默认值列。
默认值约束问题仍然存在,在实体框架,直到EF6的所有版本,似乎在实体框架来解决7
看起来你已经做了一些研究工作。竖起大拇指。 –
@Wasim,你说过“通过代码更新Model.edmx文件”。你是怎么做到的? – Thomas
@Thomas,在我的情况下,数据库不够大,无法编写代码脚本,所以我手动完成。 –
作为解决办法,我认为您可以使用数据库触发器将列值更新为默认值。
谢谢@Behzad,我很欣赏你的建议。 –
如果我无法从代码方得到解决方案,我一定会去这个选项。 –
最简单的方法是从C#初始化您的属性,从而确保默认值。
对于数据库首先,设计器忽略你的SQL默认值,你必须告诉它将你的列视为计算:选择你的实体 - >去列 - >属性 - >设置StoreGeneratedPattern为Computed(默认为None)
我试过了,它工作。谢啦! –
只想问一下,是否有任何方法可以为所有列设置此属性,因为当有多个表时它将会有所帮助。 –
@ user7369792 - 检查[这个问题](http://stackoverflow.com/questions/12691854/setting-default-value-in-entity-framework-database-first) – Alexei
我一直只是把默认值在实体的初始化。我知道这是你想避免的,但它的工作原理。 –
在我的情况下,我的实体框架得到更新更频繁,我有一些表,所以我通常避免在这些生成的代码文件中进行任何更改。 –
我不确定你是如何生成你的实体pocos的(基于你的评论上面,它听起来像你在做数据库第一)但大多数工具可以选择为你的实体创建部分类。然后,您可以创建部分类来执行实例实例化时需要执行的任何自定义逻辑。 Simon Hughes创建了一个工作得很好的工具 - https://marketplace.visualstudio.com/items?itemName=SimonHughes.EntityFrameworkReversePOCOGenerator –