gpt4 book ai didi

c# - 原始状态实例的类型错误

转载 作者:太空宇宙 更新时间:2023-11-03 13:38:45 25 4
gpt4 key购买 nike

我得到异常: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();

derivedFromTable 是 DerivedFromTableclass DerivedFromTable : Table

这个异常是什么意思(显然 ((Table)derivedFromTable) is Tableexisting is Table)我该如何解决?

最佳答案

(Table)derivedFromTable 强制转换是没有意义的,因为 Attach() 方法已经接受了 Table 类型的参数,所以扩大强制转换是隐式的。

但这并不重要,因为 Linq to SQL 会动态检查传入对象的类型,并且基本上它不支持将派生类型视为基本实体(同时因为强制转换不会更改实例的实际类型,它只是改变了它的静态接口(interface))。所以如果你想这样做,你需要首先使用类似 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();

关于c# - 原始状态实例的类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17862122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com