我讀了很多關於此的討論,但無法找到解決方案。 There我發現在nhibernate版本3,必須工作。我使用NHibernate的3.3.3Nhibernate一對多元素添加
類設備具有多個IP
public class Device
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Place { get; set; }
private Iesi.Collections.Generic.ISet<Ip> _ips = new HashedSet<Ip>();
public virtual Iesi.Collections.Generic.ISet<Ip> Ips
{
get
{
return _ips;
}
set
{
_ips = value;
}
}
}
public class Ip
{
public virtual int Id { get; set; }
public virtual Device Device { get; set; }
public virtual string Adress { get; set; }
}
映射
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="nhibbd" namespace="nhibbd.Domain">
<class name="Device" table="devices" lazy="true">
<id name="Id">
<generator class="identity" />
</id>
<property name="Name">
<column name="name" sql-type="character varying" not-null="true" length="30"/>
</property>
<property name="Place" >
<column name="place" sql-type="character varying" not-null="true" length="30"/>
</property>
<set name="Ips" inverse="false" cascade="all" generic="true">
<key column="device_id" not-null="true" update="false"/>
<one-to-many class="nhibbd.Domain.Ip" />
</set>
</class>
</hibernate-mapping>
<hibernate-mapping assembly="nhibbd" namespace="nhibbd.Domain" xmlns="urn:nhibernate-mapping-2.2">
<class name="Ip" table="ips" lazy="true" >
<id name="Id">
<generator class="identity" />
</id>
<many-to-one name="Device" class="Device">
<column name="device_id" not-null="true" sql-type="INTEGER" />
</many-to-one>
<property name="Adress">
<column name="adress" sql-type="character varying" not-null="true" length="12"/>
</property>
</class>
</hibernate-mapping>
只是想添加設備
var device = new Device {Name = "D-Link DIR 320", Place = "320 room"};
var ip = new Ip {Adress = "1921680000001"};
using (var session = GetSession)
using (var transaction = session.BeginTransaction())
{
device.Ips.Add(ip);
session.Save(device);
transaction.Commit();
}
並獲得例外
NHibernate.PropertyValueException:非空屬性引用一個空 或瞬時值nhibbd.Domain.Ip.Device
我想用逆= 「假」收集和不可─對於Ip.Device值,爲null =「true」。我怎樣才能做到這一點?
是否有辦法離開'不空=「真」'爲Ip.Device值,而不是手動設置'ip.Device == device;'在代碼中? – 2014-11-09 07:16:10
我想說:**這是一個錯誤**在我們的代碼中不使用'ip.Device ==設備;'這是域模型設置。這是關係如何工作的,而不管ORM的持久性如何。如果它是我們在內存中的高速緩存......沒有任何設置。我們只需要。必須...希望它有幫助;)享受驚人的NHibernate;) – 2014-11-09 07:59:05