原始状态实例的类型错误

本文关键字:类型 错误 实例 原始状 状态 原始 | 更新日期: 2023-09-27 18:24:59

当使用以下精简代码的版本时,我得到了异常:InvalidOperationException: The original state instance has the wrong type.

Table existing = context.Tables.Single(t => t.Key == derivedFromTable.Key);
context.Tables.Attach((Table)derivedFromTable, existing); //thrown here
context.SubmitChanges();

其中CCD_ 2和CCD_。

这个异常意味着什么(就像((Table)derivedFromTable) is Tableexisting is Table一样清楚)?我该如何解决它?

原始状态实例的类型错误

(Table)derivedFromTable强制转换没有意义,因为Attach()方法已经接受类型为Table的参数,因此加宽强制转换是隐式的。

然而,这并不重要,因为Linq-to-SQL会动态检查传入对象的类型,而且基本上它不支持将派生类型视为基本实体(也因为强制转换不会更改实例的实际类型,它只会更改其静态接口)。因此,如果要执行此操作,则需要首先使用AutoMapper之类的工具将派生实例的属性复制到基类型的实例。示例:

Table existing = context.Tables.Single(t => t.Key == derivedFromTable.Key);
Table table = Mapper.Map<DerivedFromTable, Table>(derivedFromTable);
context.Tables.Attach(table , existing);
context.SubmitChanges();