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

Linq 如何将可为null的列映射到不可为null的变量?,linq,linq-to-sql,mapping,nhibernate-mapping,Linq,Linq To Sql,Mapping,Nhibernate Mapping,如果我们有一个表,其中已经有一个字段标记为allow null(在sql server中),出于某种原因,我想将这些字段映射到c#代码中的一个类,但将我的变量保留为不可为null(离散值),如果我在db中为null,则在c#中为该变量指定其默认值 例如: Table Employee ( ID int Not NULL, Name nvarchar(256) NOT NULL, Age int NULL) 现在我想把这个表映射到这个类 class Employee { pub

如果我们有一个表,其中已经有一个字段标记为allow null(在sql server中),出于某种原因,我想将这些字段映射到c#代码中的一个类,但将我的变量保留为不可为null(离散值),如果我在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;} 
}
我可以使用LINQtoSQL或nhibernate来完成这项工作

有人能给我一个解决办法吗


啊,顺便说一句,如果db中的Age字段为空,我希望Age变量采用默认值int(例如0)

只需像通常那样映射前两列,并使用可为空的int使用以下命令

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

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

  public int Age {
    get { RawAge.HasValue ? RawAge.Value : default(int); }
    set { RawAge.Value = value; }
  }

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

但这意味着数据库中的每个字段都必须有两个属性,是否有更好的方法?dbml代码生成器为您生成私有属性。你只需要像我的回答那样写一个小包装。由于RawAge是私有的,所以使用代码不会看到它,也不会在intellisense中显示它。从技术上讲,正如您所说,有两个属性,但只有一个是可见的。我尝试了这个解决方案,但datacontext(在Linq到sql中)无法映射私有成员,即使我用ColumnAttribute修饰它,有什么想法吗??