正如标题所说,我在尝试使用Fluent NHibernate将对象保存到数据库时遇到此异常,并且它出现在NHibernate OpenSession
中。
以下是我的保存方式。
House house = new House();
house.Code = 101;
house.Name = "blabla";
DatabaseManager.SaveToDatabase(house);
这是我的SaveToDatabase
方法。
public static void SaveToDatabase(House dbObject) {
using (var session = NHibernateHelper.OpenSession()) {
using (var transaction = session.BeginTransaction()) {
session.SaveOrUpdate(dbObject);
transaction.Commit();
}
}
}
这是NHibernate
部分。
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory {
get {
if (_sessionFactory == null) {
InitializeSessionFactory();
}
return _sessionFactory;
}
}
private static void InitializeSessionFactory() {
_sessionFactory =
Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(_connection_string)
.ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<House>())
.ExposeConfiguration(cfg => new SchemaExport(cfg).Create(false, true))
.BuildSessionFactory();
}
public static ISession OpenSession() {
return SessionFactory.OpenSession();
}
这是一个包含很多类的大型模型,但是如果我尝试仅将此House
对象保存到DB,它仍然会抛出Stackoverflow异常。这里也是House
的映射。
public class HouseMap : ClassMap<House> {
public HouseMap() {
Id(x => x.Id);
Map(x => x.Code);
Map(x => x.NumberOfRooms);
Map(x => x.Name);
References<Owner>(x => x.Owner).ForeignKey("OwnerID").Cascade.All();
HasMany<ConsumptionData>(x => x.Consumptions).KeyColumn("HouseID").Cascade.All();
HasMany<Room>(x => x.Rooms).KeyColumn("HouseID").Cascade.All();
}
如果我查看数据库,它最初会创建一些表,但如果我尝试将实际数据写入这些表,则抛出异常。有什么想法?