通过NHibernate映射保存默认值

时间:2013-11-29 10:38:00

标签: nhibernate

我有一个数据库表,其中一列可以为空。我想通过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的空值保存实体时,我希望将默认值保存在数据库表中。有什么办法吗?请回答..

2 个答案:

答案 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)只需使用您实体的构造函数。