更新Fluent-NHibernate映射类不会影响数据库

时间:2013-11-05 15:41:08

标签: c# nhibernate fluent-nhibernate

我设计了一个与NHibernate完全集成的MVC 4应用程序。 有时我会在我的模型类中添加一个属性,或者删除一个属性并相应地更新映射类。

例如当我替换像

这样的属性时
Public byte[] imageData {get; set;}

使用:

public string imagePath {get; set;}

我运行应用程序并检查数据库我看到新属性已添加到dataBase但旧的属性未被删除!
或者如果我想改变一个映射的字符串属性的长度,如:

Map(x => x.Description).Nullable().Length(100);

Length(100)Length(500)在我手动删除该列并再次运行该应用之前,没有任何更改会影响数据库。

为什么会这样?有人可以赎罪吗?

这是我的NHibernate更新架构方法:

// Updates the database schema if there are any changes to the model,
    // or drops and creates it if it doesn't exist
    private static void UpdateSchema(Configuration cfg)
    {
        new SchemaUpdate(cfg)
            .Execute(false, true);
    }

2 个答案:

答案 0 :(得分:0)

看看这个,似乎是正确的

Fluent NHibernate AutoMapping SchemaExport - Change object model and Keeping Data

请注意,您已正确配置nh,例如:

 private static ISessionFactory CreateSessionFactory()
        {
            var factory = Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2008
                        .ConnectionString(c =>
                                c.FromConnectionStringWithKey("ECommerceConnectionString")))
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ProductMapping>())
                .ExposeConfiguration(config =>
                {
                    new SchemaUpdate(config).Execute(false, true);
                })
                .BuildSessionFactory();
            return factory;
        }

答案 1 :(得分:0)

一个很好的答案: 这种行为是因为nHibernate设计。

https://stackoverflow.com/a/1846926/1348121