【问题标题】:Saving default value through NHibernate mapping通过 NHibernate 映射保存默认值
【发布时间】:2013-11-29 10:38:00
【问题描述】:

我有一个数据库表,其中一列为 nullable 。我想通过 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 文件:

现在,当我尝试保存名称和年龄为空值的实体时,我希望将默认值保存在数据库表中。有什么办法吗?请回答..

【问题讨论】:

  • 你伪造了xml文件吗?

标签: nhibernate


【解决方案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; }
}

【讨论】:

    【解决方案2】:

    您有两种插入默认值的方法。

    a) 在数据库级别定义它。这将在您的表上添加一个约束,该约束将插入一个默认值。如果您从映射生成架构或在数据库脚本中定义它,则可以通过映射来执行此操作...

    您在映射中唯一需要做的重要事情是指示 nhibernate 不要尝试为为空的属性插入空值...

    这可以通过为映射设置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) 只需使用实体的构造函数即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-26
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 2012-11-28
      • 1970-01-01
      相关资源
      最近更新 更多