【发布时间】:2010-11-23 17:31:34
【问题描述】:
我有一种情况,即业务需求要求所有数据访问都通过存储过程完成。我选择使用实体框架是因为我知道存储过程支持在 4.0 中得到了很大改进
但是,我有一组程序,其中包括一些额外的参数(用户名、原因代码等),这些参数将用于 proc 中的其他逻辑。这是一个很常见的场景,所以我很惊讶 EF 让实现这一目标变得异常困难。
在我看来,解决此问题的唯一选择如下:
- 在数据库中创建一个查询基础表的视图,并包含带有空值的额外列名。
- 处理 SaveChanges 事件,或在上下文中覆盖 SaveChanges 方法并手动处理那里的函数调用。
选项 1 在我当前的项目中是不可能的,尽管它是最简单的。
选项 2 的工作量令人难以置信。 EF 的全部意义在于让我不必编写容易出错的令人费解的乏味数据访问代码。让我们看看这里可能涉及的工作量:
- 为需要此信息的每个实体以及每个必要的修改操作(插入、更新、删除)创建一个函数导入
- 创建一些包含所有信息的通用类型,并通过部分类将其应用于每个实体。
- 为每个实体 (3*N) 的每个方法编写一个映射函数请注意,这还涉及获取更新和删除的原始值
- 重写 SaveChanges 方法以检查每个实体以查看它是否是正确的 IFoo 接口,检查实体的状态,然后为该实体类型调用适当的方法。
我错过了什么吗???为什么这么常见的场景会这么难执行。
我知道有人可能认为我可以编写一个 T4 模板来为我生成所有这些代码,但这只是让我想起它是乏味的样板代码,没有增加任何实际价值。必须有一种更简单的方式来表达:
“哟 EF!我正在调用 proc!我知道我在做什么,我想在 capiche 中添加这些额外的值?”
为好奇的人提供额外信息:
- 我正在使用带有 WCF 的自我跟踪实体模板
- 附加参数不存在于实体可以链接到的任何地方
- 附加参数始终相同
- 存储过程保持原样,无法从当前合同修改它们
非常欢迎对此事提供任何帮助或见解!
干杯,
乔什
【问题讨论】:
-
“我有一种情况,业务需求要求所有数据访问都通过存储过程完成。” ——我很抱歉。
-
这不是什么大不了的事,但是,如果我不必这样做,那就太好了。不幸的是,设计需要这种方法。我希望它没有,但我被困住了。
标签: .net entity-framework stored-procedures