1

我需要设置一些默认值,并且我分别有以下类和映射。

Farmacia.cs

public class Farmacia
{
    public virtual int Id { get; protected set; }
    public virtual string Nombre { get; set; }
    public virtual string Direccion { get; set; }
    public virtual string Telefono { get; set; }
    public virtual int CodigoPostal { get; set; }
    public virtual int Estado { get; set; }

    public Farmacia()
    {
    }
}

Farmacia.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                  assembly="Domain"
                  namespace="Domain">
  <class name="Farmacia" table="farmacias">
    <id name="Id" column="idFarmacia" type="int">
      <generator class="assigned" />
    </id>
    <property name="Nombre" />
    <property name="Direccion" />
    <property name="CodigoPostal">
      <column name="codPostal" default="1"/>
    </property>
    <property name="Telefono" />
    <property name ="Estado">
      <column name="estado" default="1" />
    </property>
  </class>
</hibernate-mapping>

测试

Domain.Farmacia f = new Domain.Farmacia { Nombre = "Test" };
Session.Save(f);
Session.Flush();

我得到一个无法在数据库中插入的异常。

另一方面,如果我对代码进行一些更改(见下文),我可以保存它。

public class Farmacia
{
    public virtual int Id { get; protected set; }
    public virtual string Nombre { get; set; }
    public virtual string Direccion { get; set; }
    public virtual string Telefono { get; set; }
    public virtual int CodigoPostal { get; set; }
    public virtual int Estado { get; set; }

    public Farmacia()
    {
        Estado = 1;          // New line.
        CodigoPosta = 1;     // New line.
    }
}

Farmacia.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                  assembly="Domain"
                  namespace="Domain">
  <class name="Farmacia" table="farmacias">
    <id name="Id" column="idFarmacia" type="int">
      <generator class="assigned" />
    </id>
    <property name="Nombre" />
    <property name="Direccion" />
    <property name="CodigoPostal" column="codPostal" />   // Property changed.
    <property name="Telefono" />
    <property name ="Estado" />                           // Property changed.
  </class>
</hibernate-mapping>

我的问题是只有当对象是新的时我才需要默认值。如果对象已经在数据库中,则数据库中的对象总是在Estado和中有一些值CodigoPostal

PD:我在数据库中分配了默认值,但错误仍然存​​在。那么如果值为空(对象是新的),我该如何设置默认值?

4

1 回答 1

1

上面通过将默认值放入构造函数中所做的事情对我来说似乎很好,但如果您正在寻找另一种方式,您可能可以使用这样的东西:

(7) dynamic-update(可选,默认为false):指定UPDATE SQL应该在运行时生成,并且只包含那些值发生变化的列。

(8)dynamic-insert(可选,默认为false):指定INSERT SQL应该在运行时生成,并且只包含值不为null的列。

以上取自这里:http ://www.nhforge.org/doc/nh/en/index.html#mapping-declaration-class

尽管对于整数列,您能够使用数据库默认值的唯一方法是使它们可以为空并使用dynamic-insert,因为整数的默认值为 0。

public class Farmacia
{
    public virtual int Id { get; protected set; }
    public virtual string Nombre { get; set; }
    public virtual string Direccion { get; set; }
    public virtual string Telefono { get; set; }
    public virtual int? CodigoPostal { get; set; }
    public virtual int? Estado { get; set; }

    public Farmacia()
    {

    }
}
于 2013-01-24T13:34:57.833 回答