Fluent Nhibernate在插入过程中失败
我在使用Fluent Nhibernate时遇到问题,我有以下模型。当我试图用新的地理位置保存酒店时,我遇到了外键异常,看起来Nhibenate无法以正确的顺序保存数据,这是我可以通过Fluent Nhibernate纠正的吗Fluent Nhibernate在插入过程中失败,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我在使用Fluent Nhibernate时遇到问题,我有以下模型。当我试图用新的地理位置保存酒店时,我遇到了外键异常,看起来Nhibenate无法以正确的顺序保存数据,这是我可以通过Fluent Nhibernate纠正的吗 public class Geography { public virtual int CityID { get; set; } public virtual string CountryCode { get; set; } } public class Hot
public class Geography {
public virtual int CityID { get; set; }
public virtual string CountryCode { get; set; }
}
public class Hotel
{
public virtual int HotelID { get; set; }
public virtual Geography City { get; set; }
}
映射
public class HotelMap : ClassMap<Hotel>
{
public HotelMap()
{
Id(x => x.HotelID)
.GeneratedBy
.Identity();
References(x => x.City, "CityId")
.Cascade.All();
}
}
public class GeographyMap : ClassMap<Geography>
{
public GeographyMap()
{
Id(x => x.CityID);
Map(x => x.CountryCode);
HasMany(a => a.Hotels)
.Cascade.All();
}
}
公共类HotelMap:ClassMap
{
公共HotelMap()
{
Id(x=>x.HotelID)
.产生于
.Identity();
参考文献(x=>x.城市,“城市ID”)
.Cascade.All();
}
}
公共类地理地图:类地图
{
公共地理地图()
{
Id(x=>x.CityID);
Map(x=>x.CountryCode);
拥有许多(a=>a.酒店)
.Cascade.All();
}
}
添加生成的映射
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" mutable="true" name="Hotel" table="`Hotel`">
<id name="HotelID" type="System.Int32">
<column name="HotelID" />
<generator class="assigned" />
</id>
<many-to-one cascade="all" class="Geography" foreign-key="HotelGeography" name="City">
<column name="CityId" />
</many-to-one>
</class>
</hibernate-mapping>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" mutable="true" name="Geography" table="`Geography`">
<id name="CityID" type="System.Int32">
<column name="CityID" />
<generator class="assigned" />
</id>
<bag cascade="all" inverse="true" name="Hotels" mutable="true">
<key>
<column name="HotelID" />
</key>
<one-to-many class="Hotel" />
</bag>
<property name="CountryCode" type="System.String">
<column name="CountryCode" />
</property>
</class>
</hibernate-mapping>
尝试为
地理
类指定标识生成器。如果希望数据库生成唯一标识符(如标识),可以通过将.GeneratedBy.Native()
添加到GeographyMap
类中的Id(…)
。将.Inverse()
添加到集合映射中来实现
有关更多详细信息,请查看和我提供了我自己的Id值,这不应该是个问题OK,无论如何,您应该使用
.GeneratedBy.Assigned()
,指出这一点,因为identity是int
数据类型的默认FluentNHibernate行为。我添加了生成的映射,它看起来似乎仍然崩溃。错误是什么?创建和保存新实体的代码是什么?