C# 如何在单个NHibernate事务中删除列并在同一个表中添加具有相同名称的列?
环境:C#,NHibernate,SQL server 情景: 我必须修改表中的一列,在运行时,只有我们知道需要如何修改。因此,我们不需要修改列,只需删除现有列并添加一个同名的新列。我们不打算保留该列的数据。因此,添加/删除方法应该可以正常工作。一个约束条件是,删除和添加都应该发生在单个事务中 问题是: 如果我必须删除并重新添加的列有一些数据,则该列不起作用。它给了我这个错误:C# 如何在单个NHibernate事务中删除列并在同一个表中添加具有相同名称的列?,c#,sql-server,nhibernate,C#,Sql Server,Nhibernate,环境:C#,NHibernate,SQL server 情景: 我必须修改表中的一列,在运行时,只有我们知道需要如何修改。因此,我们不需要修改列,只需删除现有列并添加一个同名的新列。我们不打算保留该列的数据。因此,添加/删除方法应该可以正常工作。一个约束条件是,删除和添加都应该发生在单个事务中 问题是: 如果我必须删除并重新添加的列有一些数据,则该列不起作用。它给了我这个错误: ALTER TABLE只允许添加可能包含NULL的列,或指定了默认定义的列,或添加的列是标识或时间戳列,或者如果前面的
ALTER TABLE只允许添加可能包含NULL的列,或指定了默认定义的列,或添加的列是标识或时间戳列,或者如果前面的条件都不满足,则该表必须为空才能添加此列。
我假设,当我首先删除列时,重新添加应该不会有问题,但它不会这样做
简化代码:
var dropColumn = string.Format("alter table {0} drop column {1} ",tableName, fieldName);
Session.CreateSQLQuery(dropColumn).ExecuteUpdate();
var addColumn = string.Format("alter table {0} add {1} nvarchar(255) not null",tableName,fieldName);
Session.CreateSQLQuery(addColumn).ExecuteUpdate();
我做错了什么?错误是:“可以包含null,或者有一个默认值”,在第二个查询中,您有“notnull”。那么,在添加列之后,您希望该列中包含什么值(如果不是null)?如果您对此有答案,请使用默认值约束