2012-12-24 33 views
1

我试图通过AJAX(POST)将HTML表单传递给服务器。该表单包含多个文本框。如果这些字段为空,则控制器将接收像field1 =“”,field2 =“”,field3 =“”的值。然后我尝试值这样增加(使用的EntityFramework 4.1)数据库:如何将NULL插入数据库,如果输入文字为空

NewObject newobject = new NewObject { _field1 = field1, _field2 = field2, _field3 = field3}; 
myDBContext.NewObjects.Add(newobject); 
myDBContext.SaveChanges(); 

我怎样才能让这个空字符串存储在数据库NULL

,想到的唯一的事情:

f1 = (field1!= "") ? field1 : null; 
f2 = (field2!= "") ? field2 : null; 
f3 = (field3!= "") ? field3 : null; 
NewObject newobject = new NewObject { _field1 = f1, _field2 = f2, _field3 = f3}; 
myDBContext.NewObjects.Add(newobject); 
myDBContext.SaveChanges(); 

是否有更漂亮的解决方案(在任何级别(的EntityFramework,用数据说明,SQL Server)的)?

回答

3

使用Sql Server时,您可以使用DBNull.Value设置空值。而使用实体框架,我认为如果值为空,它会在数据库中将其设置为空。

你可以缩短你的代码。

NewObject newobject = new NewObject 
        { 
         _field1 = (field1=="") ? null : field1, 
         _field2 = (field2=="") ? null : field2, 
         _field3 = (field3=="") ? null : field3 
         }; 
myDBContext.NewObjects.Add(newobject); 
myDBContext.SaveChanges(); 
0

您可以创建一个扩展方法。

public static class StringExtensions { 
    public static string NullIfEmpty(this string text) { 
     return string.IsNullOrEmpty(text)? null : text; 
    } 
} 

然后,只需调用方法

NewObject newobject = new NewObject 
        { 
         _field1 = field1.NullIfEmpty(), 
         _field2 = field2.NullIfEmpty(), 
         _field3 = field3.NullIfEmpty() 
         }; 
myDBContext.NewObjects.Add(newobject); 
myDBContext.SaveChanges();