当我调试这些代码行并查看查询变量时,我可以看到 System.Data.EntityException:
数据读取器与指定的“UnitId”不兼容。类型的成员“ITMS.Unit”在数据读取器中没有同名的对应列。
var query = context.Units.SqlQuery("WITH x(Id) AS
(SELECT @UnitId UNION ALL SELECT Unit.UnitId
FROM Unit JOIN x ON Unit.ParentId = x.Id ) " +
"DELETE Unit FROM x JOIN Unit ON Unit.UnitId = x.Id",
new SqlParameter("UnitId", unit.UnitId));
在 Sql Management Studio 中执行的原始 SQL 运行良好。
这个数据读取器有什么问题?嗯......实际上我做了一个选择,但在它之后删除......这是一个非查询。那是问题吗?顺便提一句。我首先使用代码。
更新
我已更新并更正了异常消息。
将 @-symbol 添加到 SqlParameter 名称“@UnitId”没有帮助。
尽管发生此异常,但 UnitId 及其子项已被删除!
似乎其他人也有同样的问题:http ://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/17bdad58-93dd-4ba8-8a60-5177f3ce4a88