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

kda*_*awg 3 entity-framework poco entity-framework-4

我在尝试执行a FunctionImport- 结果映射到POCO ComplexType 时收到错误- 来自自定义内部ObjectContext.具体来说,错误说明:

BlahComplexTypeExecuteFunction中的type参数与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));
Run Code Online (Sandbox Code Playgroud)

我没有使用任何T4模板来生成POCO,所有类都是手动编写的. BlahComplexType是一个具有简单数据类型属性的类.它的定义与.edmx文件中的ComplexType定义相匹配,包括匹配的命名空间和所有内容(我还有很多其他实体和复杂类型映射到POCO).

msdn文档在这里指出ExecuteFunction<T>必须实现的返回类型IEntityWithChangeTracker,但不是映射到ComplexType而不是实体的整点,正是因为我不关心任何更改(事实上,不允许更改 - BlahComplexType被认为是"价值对象")?

有没有人有幸用ExecuteFunction调用FunctionImport,其结果映射到带有Entity Framework 4的POCO ComplexType?

kda*_*awg 6

哇,愚蠢的用户错误!!

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

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

因此,一如既往,双重和三重检查EDMX定义和POCO类定义.(我仔细检查,但忽略了三重检查!!)

捂脸