2013-02-28 52 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 
    } 
} 

}