我在尝试执行 FunctionImport
时收到错误 - 结果被映射到 POCO ComplexType - 从自定义 ObjectContext
中。具体来说,错误指出:
因为我使用的是自定义 ObjectContext
(我正在使用完全 POCO Entity Framework 环境),所以我必须手动调用 FunctionImport
,我喜欢:
var blah = ExecuteFunction<BlahComplexType>("GetBlah", MergeOption.NoTracking,
new ObjectParameter("p_one", paramOne),
new ObjectParameter("p_two", paramTwo),
new ObjectParameter("p_three", string.Empty));
我没有使用任何 T4 模板来生成 POCO,所有类都是手动编写的。
BlahComplexType
是一个具有简单数据类型属性的类。它的定义与 .edmx 文件中的 ComplexType 定义相匹配,包括匹配的命名空间和所有内容(我也有很多其他实体和复杂类型映射到 POCO)。msdn 文档指出 here
ExecuteFunction<T>
的返回类型必须实现 IEntityWithChangeTracker
,但这并不是映射到 ComplexType 而不是 Entity 的全部重点,正是因为我不关心任何更改(实际上,不允许更改-- BlahComplexType 被认为是“值对象”)?有没有人有幸通过 ExecuteFunction 调用 FunctionImport,其结果映射到具有 Entity Framework 4 的 POCO ComplexType?
最佳答案
哇,愚蠢的用户错误!!
与手动创建 POCO 类一样——EDMX 文件中的 ComplexType 定义与其 POCO 类之间存在不一致。如果只有一个错误或不一致,则错误消息会尝试告诉您问题的根源。但是,如果您有多个,它只会说明这些类型是“不兼容的”,所以您会感到疑惑。
就我而言,我有一个属性名称不一致(一个有“AcctId”,另一个有“Acctid”)和一个属性数据不一致(类需要 int (Int32) 但存储过程返回 Int16)。
因此,一如既往,双重和三重检查 EDMX 定义和 POCO 类定义。 (我仔细检查过,但忽略了三次检查!!)
脸掌
关于entity-framework - Entity Framework 4——映射到 POCO 复杂类型的 FunctionImport 的 ExecuteFunction<T> 的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4547394/