我有一个实体模型,我想每次运行应用程序时都将其反映到数据库中,但不清除数据,因此我使用了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)),那么数据库中的列即使可以从数据库角度进行有效更改,但并没有更新。
是否可以使用SchemaUpdate
来更改(生成更改脚本)现有列的新长度/精度/可为空约束?