我在尝试执行FunctionImport
时收到错误 - 结果映射到POCO ComplexType - 来自自定义ObjectContext
。具体来说,错误说明:
ExecuteFunction中的类型参数
BlahComplexType
与函数返回的类型BlahComplexType
不兼容。
因为我正在使用自定义ObjectContext
(我正在使用完全POCO实体框架环境),所以我必须手动调用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而不是实体的全部要点正是因为我不关心任何更改(实际上,不允许更改 - BlahComplexType被视为“值对象”)?
有没有人有幸用ExecuteFunction调用FunctionImport,其结果映射到带有Entity Framework 4的POCO ComplexType?
答案 0 :(得分:6)
与手动创建POCO类一样 - EDMX文件中的ComplexType定义与其POCO类之间存在不一致。如果只有一个错误或不一致,则错误消息会尝试告诉您问题的根源。但是,如果你有多个,它只会声明类型是“不兼容的”,所以你不知道。
在我的情况下,我有一个属性名称不一致(一个有“AcctId”,另一个有“Acctid”)和属性数据不一致(类期望int(Int32)但存储过程返回Int16)。< / p>
因此,与往常一样,双重和三重检查EDMX定义和POCO类定义。 (我仔细检查过,但忽略了三重检查!!)
捂脸