EFCodeFirstPropertyNull问题我在asp.netmvc3模型中使用EFCodeFirst。(EntityFramework4.0和EFCodeFirst0.8)模型定义如下:publicclassUser{[Key]publicintId{get;放;}公共字符串名称{得到;放;}publicintWorkedYears{得到;放;当使用db.Users.Find(1)时,抛出这个错误:'User'上的'WorkedYears'属性不能设置为'null'值。您必须将此属性设置为“Int32”类型的非空值。注意:数据库中存在user.Id=1,记录的WorkedYears为NULL。如果我在数据库中设置WorkedYears=0,则错误消失,如果我将属性定义为:publicint?工作年数{get;设置;}公共int?工作年数{get;设置;}公共int?工作年数{get;set;},错误也消失了。但我不想使用int?,并且还希望该列在未设置时保持为NULL。那么有没有其他的解决办法呢?太感谢了。你的模型不反映你的数据库,所以它不会工作。您必须定义WorkedYearsint?用int?如果您的视图必须具有此属性,则必须定义一个新类“ViewModel”,其中WorkedYears将为null,并在数据库包含null时处理该属性应包含的内容。为EF纠正POCO:publicclassUser{[Key]publicintId{get;放;}公共字符串名称{得到;放;公共诠释?WorkedYears{得到;放;}}正确的视图模型:publicclassUserModel{publicintId{get;放;}公共字符串名称{得到;放;}publicintWorkedYears{得到;放;您的控制器负责转换UserUserModel。如果您仍想使用单个类,则必须添加第二个未映射的属性,该属性将在内部使用nullabeWorkedYears:publicclassUser{[Key]publicintId{get;放;}公共字符串名称{得到;放;公共诠释?WorkedYears{得到;放;}[NotMapped]publicintWorkedYearsDisplay{get{returnWorkedYears??0;}设置{WorkedYears=value==0?新的Nullable():值;}}}结论:如果您的数据库包含可以包含空值的可为空的字段,则您的映射类中必须有一个可为空的属性。没有别的办法。以上就是C#学习教程:EFCodeFirstPropertyNull问题分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
