我有一个数据库表,其中一列可以为空。我想通过NHibernate映射保存实体,在实体成员为空的情况下保存一些默认值。 实体:
public class Person
{
public virtual int PersonId { get; set; }
public virtual string Name { get; set; }
public virtual int ?Age { get; set; }
}
Person.hbm.xml文件:
现在,当我尝试使用Name和Age的空值保存实体时,我希望将默认值保存在数据库表中。有什么办法吗?请回答..
答案 0 :(得分:1)
是的,有一种非常简单的方法
public class Person
{
public Person(){
Age = 15; // default value
}
public virtual int PersonId { get; set; }
public virtual string Name { get; set; }
public virtual int Age { get; set; }
}
答案 1 :(得分:1)
您有两种方法可以插入默认值。
a)在数据库级别定义它。这将在您的表上添加一个插入默认值的约束。如果从映射生成模式或在数据库脚本中定义模式,则可以通过映射执行此操作...
您在映射中唯一需要做的就是指示nhibernate不要尝试为null属性插入空值...
这可以通过为映射设置DynamicInsert
来实现。
如果您希望使用相同的更新机制,还要定义DynamicUpdate
...
以下是流利的nhibernate的一些例子:
public class SomeMap : ClassMap<Something>
public PostMap()
{
...
DynamicInsert();
Map(p => p.StringProperty).Default("N'something'");
Map(p => p.SomeInt).Default("1");
...
如您所见,您必须使用SQL表示法定义值!否则nhibernate将抛出一些异常来创建模式......
当然,这也适用于可空列。
b)只需使用您实体的构造函数。