实体框架4 - FunctionImport的ExecuteFunction <t>映射到POCO复杂类型的问题</t>

时间:2010-12-28 16:08:55

标签: entity-framework entity-framework-4 poco

我在尝试执行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?

1 个答案:

答案 0 :(得分:6)

哇,愚蠢的用户错误!!

与手动创建POCO类一样 - EDMX文件中的ComplexType定义与其POCO类之间存在不一致。如果只有一个错误或不一致,则错误消息会尝试告诉您问题的根源。但是,如果你有多个,它只会声明类型是“不兼容的”,所以你不知道。

在我的情况下,我有一个属性名称不一致(一个有“AcctId”,另一个有“Acctid”)和属性数据不一致(类期望int(Int32)但存储过程返回Int16)。< / p>

因此,与往常一样,双重和三重检查EDMX定义和POCO类定义。 (我仔细检查过,但忽略了三重检查!!)

捂脸