2011-07-11 38 views
1

如果我们有一个表已经有一个字段标记为允许null(在SQL服务器),由于某种原因,我想映射这些字段到一个类在C#代码但保持我的变量不可空(离散值),如果我在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的,要么会做工作。

谁能给我这个

阿的解决方案,顺便说一句,如果分贝的时期字段为空我想要的年龄变量带参数的默认值(例如0)

回答

1

刚前两列映射,你通常会与可空INT使用下面...

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

在你LINQ2SQL模型中,你能说出年龄场RawAge并使其私人。然后创建一个定义Age的部分类员工

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

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

+0

但这意味着我必须有两个属性为数据库中的每个字段,有没有更好的方法? –

+0

dbml代码生成器为您创建私有属性。你只需要在我的回答中写下小包装。由于RawAge是私人的,使用代码不会看到它,并且它不会在智能感知中显示。从技术上讲,你说的有两个属性,但只有一个是可见的。 – hatchet

+0

我试过这个解决方案,但datacontext(在Linq到SQL),无法映射私人成员,即使我用ColumnAttribute装饰它,任何想法? –

相关问题