【发布时间】:2015-01-05 08:28:35
【问题描述】:
我阅读了很多关于此的讨论,但找不到解决方案。 There 我发现在 nhibernate 版本 3 中必须有效。我使用休眠 3.3.3
类设备有很多 Ips
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
我想将 inverse="false" 用于收集,not-null="true" 用于 Ip.Device 值。我怎样才能做到这一点?
【问题讨论】:
标签: c# nhibernate orm mapping one-to-many