休眠中的默认值
本文关键字:默认值 休眠 | 更新日期: 2023-09-27 17:56:03
我需要设置 som 默认值,我分别有以下类和映射。
法玛西亚.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:我在数据库中分配了默认值,但错误仍然存在。那么,如果值为空(对象是新的),如何设置默认值?
您通过将默认值放在构造函数中所做的对我来说似乎很好,但是如果您正在寻找另一种方式,则可以使用这样的东西:
(7) 动态更新(可选,默认为 false):指定 UPDATE SQL 应在运行时生成,并且仅包含那些 其值已更改的列。
(8) 动态插入(可选,默认为 false):指定 插入 SQL 应在运行时生成,并且仅包含列 其值不为空。
以上摘自这里: http://www.nhforge.org/doc/nh/en/index.html#mapping-declaration-class
不过,对于整数列,能够使用数据库默认值的唯一方法是使它们可为 null 并使用 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()
{
}
}