2011-07-01 22 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

相关问题