2011-07-01 24 views
10

背景:RIA/EF4實體屬性映射到NOT NULL nvarchar的 - 空字符串

  • 實體框架4
  • 的Silverlight 4
  • RIA服務
  • MSSQL Server 2008的

我有一個名爲Description的String屬性的實體。

在數據庫中它映射到NOT NULL NVARCHAR(200)

問題:

當我嘗試插入實體的一個新行,這是我做的:

MyExampleEntity entity = new MyExampleEntity() 
{ 
    Name = "example", 
    Description = ""  // NOTE THIS LINE! 
}; 

DatabaseContext db = new DatabaseContext(); 
db.MyExampleEntities.Add(entity); 
db.SubmitChanges(); 

然而,這會導致異常說"The Description field is required."

問題:

不應該「空字符串「就這麼簡單 - 一個零字符的字符串

我相信,只有Description = null應被視爲提供沒有價值

  • 爲什麼我的字符串,它有一個值(雖然它的長度爲0),被認爲是好像我已經省略了值?
  • 此轉換髮生在什麼級別?在RIA上,在EF或MSSQL中?
  • 當我設置Description to ""並導致例外Description = null(沒有值)時,是否有辦法使描述具有零長度值?

回答

9

這似乎是實體框架的一個症狀。

Related Article

一些數據註解可以用來解決這個問題:

[MetadataType(typeof(Report_META))] 
    public partial class Report 
    { 
    } 

    public partial class Report_META 
    { 
     [Required(AllowEmptyStrings = true)] 
     [DisplayFormat(ConvertEmptyStringToNull = false)] 
     public object Note { get; set; } 
    } 
+0

它的工作原理,謝謝。 –

+1

請注意,如果您使用這些規則,[[Required]'屬性可能與FluentValidation規則衝突,因爲它們也可以添加該屬性,並且您一次只能有一個屬性實例([http:// stackoverflow.com/a/5552237/1454265](http://stackoverflow.com/a/5552237/1454265))。我可以解決這個問題,並通過從MetadataType類中刪除'[Required]'屬性並添加一個條件規則來驗證:'RuleFor(x => x.Field).Etc(...) .When(x =>!string.IsNullOrWhitespace(x.Field);' – user1454265

相關問題