原始状态实例的类型错误
本文关键字:类型 错误 实例 原始状 状态 原始 | 更新日期: 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 Table
和existing 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();