我设计了一个与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);
}
答案 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设计。