我们如何在单个NHibernate事务中删除列并在同一个表中添加具有相同名称的列?

时间:2011-12-16 06:58:39

标签: c# sql-server nhibernate

环境:C#,NHibernate,SQL服务器。

情景:

我必须修改表中的列,并且在运行时我们才知道我们需要如何修改。因此,我们只需删除现有列并添加具有相同名称的新列,而不是修改列。我们也不打算保留该列的数据。因此,添加/删除方法应该可以正常工作。一个限制是,删除和添加都应该在单个事务中发生。

问题:

如果我必须删除并重新添加的列有一些数据,则它不起作用。它给了我这个错误:

ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT definition specified, or the column being added is an identity or timestamp column, or alternatively if none of the previous conditions are satisfied the table must be empty to allow addition of this column.

我假设当我首先删除该列时,重新添加不应该是一个问题,但它没有这样做。

简化代码:

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();

我做错了什么?

1 个答案:

答案 0 :(得分:1)

错误说:“可以包含空值,或者有一个DEFAULT”,在第二个查询中你有“not null”。那么在添加列之后,您希望在该列中有什么值(如果不为null)?如果您有使用默认值约束的答案。