2013-02-28 53 views
4

我的数据库有一个不为空的字段,但可以包含一个空字符串。当我尝试使用connection.SaveChanges()保存记录时,我收到一个异常,说“MyField字段是必需的”。Buddy类中的必需属性不适用于实体框架5和ASP.NET

我创建了一个BuddyClass如下,但我仍然得到消息:

namespace MyNamespace { 
[MetadataType(typeof(QuesT_Metadata))] public partial class QuesT { } 
public class QuesT_Metadata { 
    [Required(AllowEmptyStrings = true) 
    public string MyField { get; set; } 
} 
} 

我可以使用的ErrorMessage属性更改时引发了错误的消息,所以我知道好友类是正常工作,但显然Required属性不是。

我也试过包括属性DisplayFormat(ConvertEmptyStringToNull = false),但得到了相同的结果。

我已经做到了这一点,也是第一次参考下面似乎说它应该工作,所以我很难过。谁能帮忙?

引用(只有前两个看似直接相关,但其他人仍可能有用):

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.requiredattribute.allowemptystrings.aspx
http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.displayformatattribute.convertemptystringtonull.aspx
How to make an Entity Framework property NOT NULL, but not required in form submission
Data annotation attributes not working using buddy class metadata in an MVC app
Data validation with custom attributes (AttributeTargets.Class) on EF buddy classes

回答

1

我在同这里的船...我有几个你的确切行为的实例工作得很好....

现在,一个特定的字段将不会表现...

但是,如果我忽略“必需(AllowEmptyStrings = true)”属性,事情会恢复正常工作。其中,我想是我真正想要的,因为有问题的属性并没有真正意义上的要求(必需,但允许用户不回答).....

对我而言更大的问题是它为什么有时起作用,有时不起作用?

但是在一个miminum中,删除类似代码的应该为你解决问题。

0

我已经通过捕获错误解决此工作:

public static class ExtensionMethods { 
public static void SaveChangesWithEmptyStrings(this DbContext context) { 
    try { 
     context.SaveChanges(); 
    } 
    catch (DbEntityValidationException ex) { 
     foreach (DbEntityValidationResult result in ex.EntityValidationErrors) 
      foreach (DbValidationError error in result.ValidationErrors) { 
       Type t = result.Entry.Entity.GetType(); 
       PropertyInfo pi = t.GetProperty(error.PropertyName); 
       pi.SetValue(result.Entry.Entity, ""); 
      } 
     context.SaveChanges(); // Try again 
    } 
} 

}