【问题标题】:Strategy for using stored procedure with extra params in Entity Framework 4在 Entity Framework 4 中使用带有额外参数的存储过程的策略
【发布时间】:2010-11-23 17:31:34
【问题描述】:

我有一种情况,即业务需求要求所有数据访问都通过存储过程完成。我选择使用实体框架是因为我知道存储过程支持在 4.0 中得到了很大改进

但是,我有一组程序,其中包括一些额外的参数(用户名、原因代码等),这些参数将用于 proc 中的其他逻辑。这是一个很常见的场景,所以我很惊讶 EF 让实现这一目标变得异常困难。

在我看来,解决此问题的唯一选择如下:

  1. 在数据库中创建一个查询基础表的视图,并包含带有空值的额外列名。
  2. 处理 SaveChanges 事件,或在上下文中覆盖 SaveChanges 方法并手动处理那里的函数调用。

选项 1 在我当前的项目中是不可能的,尽管它是最简单的。

选项 2 的工作量令人难以置信。 EF 的全部意义在于让我不必编写容易出错的令人费解的乏味数据访问代码。让我们看看这里可能涉及的工作量:

  1. 为需要此信息的每个实体以及每个必要的修改操作(插入、更新、删除)创建一个函数导入
  2. 创建一些包含所有信息的通用类型,并通过部分类将其应用于每个实体。
  3. 为每个实体 (3*N) 的每个方法编写一个映射函数请注意,这还涉及获取更新和删除的原始值
  4. 重写 SaveChanges 方法以检查每个实体以查看它是否是正确的 IFoo 接口,检查实体的状态,然后为该实体类型调用适当的方法。

我错过了什么吗???为什么这么常见的场景会这么难执行。

我知道有人可能认为我可以编写一个 T4 模板来为我生成所有这些代码,但这只是让我想起它是乏味的样板代码,没有增加任何实际价值。必须有一种更简单的方式来表达:

“哟 EF!我正在调用 proc!我知道我在做什么,我想在 capiche 中添加这些额外的值?”

为好奇的人提供额外信息:

  • 我正在使用带有 WCF 的自我跟踪实体模板
  • 附加参数不存在于实体可以链接到的任何地方
  • 附加参数始终相同
  • 存储过程保持原样,无法从当前合同修改它们

非常欢迎对此事提供任何帮助或见解!

干杯,
乔什

【问题讨论】:

  • “我有一种情况,业务需求要求所有数据访问都通过存储过程完成。” ——我很抱歉。
  • 这不是什么大不了的事,但是,如果我不必这样做,那就太好了。不幸的是,设计需要这种方法。我希望它没有,但我被困住了。

标签: .net entity-framework stored-procedures


【解决方案1】:

EF 的全部意义在于拯救我 从不得不写得麻木 繁琐的数据访问代码 容易出错。

没错,它的做法是使用 T4 转换为您编写样板代码。

我知道有人可能认为我 可以写一个T4模板来生成 所有这些代码都是给我的,但那只是 让我回到原来的点 繁琐的样板代码,没有添加 真正的价值。

...这就是为什么利用 T4 似乎是解决此问题的明显方法。您所描述的代码并不比实体框架已经为您生成的代码更乏味。您实际上可以更改实体上下文,以便 .edmx.cs 文件首先由您自己的自定义 T4 模板生成,而不是由 Visual Studio 的内置转换生成。

我还没有在实体框架中使用存储过程,所以可能有更好的方法来做你所描述的事情,但如果 T4 方法可以解决你的问题,我不会太快打折问题充分。

【讨论】:

  • 我实际上没有贬低 T4 模板。事实上,我目前正在修改自我跟踪​​实体模板以添加一些我需要的自定义代码。我想我正在寻找一些更成熟的东西。使用这种方法,我完全绕过了存储过程到 EF 提供的实体映射支持......这对我来说似乎适得其反。
  • 一般来说,我不想重新编写 EF 所做的所有事情......否则我最好只编写自己的 T4 模板来为我完成所有繁重的工作。这篇文章是半问题半咆哮,所以我道歉。我希望有人可以提供一些关于这个问题的见解,也许他们之前是如何解决它的......
【解决方案2】:

msdn 论坛中有一个关于此主题的帖子:
http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/182c99d0-5fde-4292-b356-4f9a4d86e032/
我遇到了同样的问题,我想我会使用 CUD 过程作为标准函数导入,而不是使用 SaveChanges()。

【讨论】:

    猜你喜欢
    • 2018-10-18
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多