如何使用nhibernate SchemaUpdate功能更改列

时间:2011-11-02 13:26:34

标签: c# .net nhibernate c#-4.0 fluent-nhibernate

我有实体模型,我希望每次运行应用程序时都反映到数据库但没有清除数据,因此我在某种程度上使用SchemaUdpate和流畅的nhibernate映射方法

var config = Fluently.Configure().Database
(MsSqlConfiguration.MsSql2008.ConnectionString(connectionString));
//here I add mappings , apply conventions, build configuration, etc...
//
new SchemaUpdate(configuBuild).Execute(doUpdate: true, script: true);

所以我的实体模型几乎一直都在正确更新。问题是,当我改变属性的定义时,假设我有这样的属性

 [CustomSqlType("nvarchar(400)")]
 public virtual string Name { get; set; }

CustomSqlType只是在加载映射时将由特定约定应用的属性。在这种情况下,Name属性将创建为nvarchar(400)字段。但如果将来我将定义更改为此

 [CustomSqlType("nvarchar(500)")]
 public virtual string Name { get; set; }

将生成正确的hbm.xml文件(正确表示nvarchar(500))但数据库中的列不是更新事件,尽管此类alter在db透视图中有效。 是否可以使用SchemaUpdate更改(生成更改脚本)具有新长度/精度/可空约束的现有列?

1 个答案:

答案 0 :(得分:10)