entity-framework - Entity Framework 4 -- FunctionImport 的 ExecuteFunction<T> 映射到 POCO 复杂类型的问题

标签 entity-framework entity-framework-4 poco

我在尝试执行 FunctionImport 时收到错误消息-- 结果映射到 POCO ComplexType -- 来自自定义 ObjectContext .具体来说,错误状态:

The type parameter BlahComplexType in ExecuteFunction is incompatible with the type BlahComplexType returned by the function.

因为我使用的是自定义 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 -- FunctionImport 的 ExecuteFunction<T> 映射到 POCO 复杂类型的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4547394/

相关文章:

entity-framework - Azure 上部分信任 Entlib 4.1?

c# - 无法在 VS 2017 .NET Core 上为 Entity Framework 启用迁移

c# - 如何使 ServiceStack MiniProfiler 与 EF 一起使用?

linq - EF如何按日期过滤数据

asp.net - 使用 .NET 4.5 的 ASP.Net 成员资格和 Entity Framework 迁移问题

.net-4.0 - 使用 POCO 动态代理跨多个数据上下文跟踪 Entity Framework 4.0 中的更改

c# - 使用 Entity Framework 和 POCO 实体关联实体中的重复行

c# - 普通 MVC 项目登录需要哪些表?

wcf - 使用 WCF 序列化 POCO 代理

c# - 在 SQL CE 数据库上的 Entity Framework 中使用 DateDiff