我有实体模型,我希望每次运行应用程序时都反映到数据库但没有清除数据,因此我在某种程度上使用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
更改(生成更改脚本)具有新长度/精度/可空约束的现有列?
答案 0 :(得分:10)