gpt4 book ai didi

c# - Entity Framework : Mapping sproc results to existing EF Entity

转载 作者:行者123 更新时间:2023-11-30 16:31:42 25 4
gpt4 key购买 nike

我正在尝试将 EF 与现有数据库一起使用。我将一个 Client 表引入到我的数据模型中,并让 EF 创建一个 Client 实体。我有一个存储过程 GetClientSearch,它只返回 Client 表的 15 列中的 5 列,因为这是该调用所需的全部内容。

这是我到目前为止所做的:

  • 将 sproc 添加到 Function Imports 并将 proc 设置为映射到 Client 实体。

  • 当我通过 Context 执行过程时,我得到“数据读取器与指定的‘GAINABSModel.Client’不兼容。‘MiddleInitial’类型的成员在具有相同名称的数据读取器。”异常(exception)。 (MiddleInitial 不是过程中返回的列之一)

  • 我知道我可以创建一个映射到过程的新实体,但我不想为每个必须导入到我的模型中的过程都这样做。

  • 鉴于数据库目前正在生产中使用,更改存储过程以映射到我当前的实体可能不是一个选项。

目前使用 EF 4 和 VS 2010。

那么,有没有办法将存储过程的结果映射到客户端实体,即使返回的列与 EF 实体的属性不是 1:1?

最佳答案

是的,这是我在 EF 中的众多痛点之一。

如果您无法修改 SP,最好的办法可能是在现有 SP 之上创建“包装”SP。

换句话说,EF 服务 SP 调用现有的 SP,并为您不需要但实体需要的列返回 NULL。

当然,更好的选择是正确创建实体。

另一种选择是使用 ObjectContext.Translate<T> ,它基本上在 SPROC 结果和您提供的实体之间执行 L-R。

如果结果集不包含该字段,则该对象的属性将为空。

这可能是您想要的。

关于c# - Entity Framework : Mapping sproc results to existing EF Entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4739806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com