Entity Framework 4.0 的一个bug :DefaultValue问题

其实是一个很常用的场景:某个字段比如是不可为空bit型的,在数据库里设置了默认值为1,对应的属性类型自然是bool.

使用VS2010的模型编辑器更新了Model信息后,进行插入测试,没有对该字段赋值,因为是不可空bool类型,我们知道,在new这个对象的时候,如果没有显示指定,该属性一定是false的。但因为数据库设置了默认值,所以我们希望的结果应该是true。但实际的结果却是false,说明,数据库的默认设置在EF下没起作用。

解决方案:

第一步:手工使用xml编辑器打开edmx文件,找到相应的实体和属性,手工加上如下信息:

<Property Name="IsVisible" Type="bit" Nullable="false" DefaultValue="true" />

第二步:使用模型浏览器,找到相应的实体属性,并设置默认值

保存之后,再次测试,现在结果正常了,如果insert的时候不设置该属性,则会按照数据库的默认设置新增,如果update的时候,就按照具体的字段值来更新了。

从网上搜了下,也找到类似的问题:

可参考:https://connect.microsoft.com/VisualStudio/feedback/details/505178/storegeneratedpattern-property-in-ado-net-entity-model-designer-sets-cdsl-annotation-but-not-ssdl-attribute#

http://connect.microsoft.com/VisualStudio/feedback/details/611665/storegeneratedpattern-does-not-saved-properly-into-edmx-entity-framework-4-0

该问题不知道在4.1里面修复了没有,如果有用过的朋友请告知 一下,不胜感激。考虑到项目情况,暂时还不打算升级到4.1。

posted @ 2011-09-07 19:06  L.Qiu  阅读(782)  评论(0编辑  收藏  举报