保存到数据库时的Stackoverflow异常(NHibernate)

时间:2015-02-03 01:08:52

标签: c# database nhibernate fluent-nhibernate stack-overflow

正如标题所说,我在尝试使用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();
    }

如果我查看数据库,它最初会创建一些表,但如果我尝试将实际数据写入这些表,则抛出异常。有什么想法?

0 个答案:

没有答案