2013-01-24 37 views
1

我需要設置som默認值,並分別具有以下類和映射。nhibernate中的默認值

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(); 

我也得到一個EXCE它不能在數據庫中插入。

另一方面,如果我在代碼中做了一些修改(見下文),我可以保存它。

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> 

我的問題是,我需要的默認值只有當對象是新的。如果對象已經在數據庫中,則始終來自數據庫的對象將在EstadoCodigoPostal中具有一些值。

P.D:我在數據庫中分配了默認值,但錯誤仍然存​​在。 那麼如果值爲空(對象是新的),如何設置默認值?

+0

你得到了什麼錯誤? –

回答

1

你通過將默認值在構造函數中做上述似乎什麼罰款給我,但如果你正在尋找另一種方式,你也許能夠使用的東西是這樣的:

(7) dynamic-update(可選,默認爲false):指定 UPDATE SQL應該在運行時生成,並且只包含那些值已更改的 列。 (8)動態插入(可選,默認爲false):指定 INSERT SQL應該在運行時生成並且只包含其值不爲空的列 (012)。

以上是從這裏取: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() 
    { 

    } 
}