我有实体模型,我想在每次运行应用程序时将其反射(reflect)到数据库,但不清除数据,因此我在某种程度上使用 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
更改(生成更改脚本)具有新长度/精度/可空约束的现有列?
最佳答案
好吧我发现不可能,下面是SchemaUpdate
执行的代码
foreach (Column column in ColumnIterator)
{
IColumnMetadata columnInfo = tableInfo.GetColumnMetadata(column.Name);
if (columnInfo != null)
{
continue;
}
// the column doesnt exist at all.
// other not important code
}
如您所见,如果该列存在,默认情况下它什么都不做。
关于c# - 如何使用 nhibernate SchemaUpdate 功能更改列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7981115/