如何将可空列映射到不可为空的变量?

时间:2011-07-11 22:32:53

标签: linq linq-to-sql mapping nhibernate-mapping

如果我们有一个表已经有一个标记为allow null的字段(在sql server中),并且出于某种原因我想将这些字段映射到c#代码中的类,但保持我的变量不可为空(离散值) ,如果i在db中为null,则将此变量赋予其在c#中的默认值。

例如:

Table Employee (
  ID int Not NULL,
  Name nvarchar(256) NOT NULL,
  Age int NULL)

现在我想将此表映射到此类

class Employee {
   public int ID {get; set;} 
   public string Name {get; set;}
   public int Age {get; set;} 
}

我使用linq to sql或者nhibernate都没问题,要么就可以了。

任何人都可以为我提供解决方案

啊,BTW,如果db中的Age字段为null,我希望Age变量采用默认值int(例如0)

2 个答案:

答案 0 :(得分:1)

只需像往常一样映射前两列,并使用nullable int使用以下内容...

if (Age.HasValue) return Age.Value else return 0;

答案 1 :(得分:1)

在linq2sql模型中,您可以将Age字段命名为RawAge并将其设为私有。然后创建一个将Age定义为

的部分类Employee
  public int Age {
    get { RawAge.HasValue ? RawAge.Value : default(int); }
    set { RawAge.Value = value; }
  }

但问题是,您现在无法将Age的值设置为null。您不能将int的默认值映射回null,因为它是该字段的有效非null值。