【发布时间】:2011-02-01 09:13:23
【问题描述】:
我对使用 linq 2 sql 中的存储过程更新数据有点困惑。 我的问题是:当我使用存储过程更新数据库中的一些数据时(但是这个存储 过程没有映射到某个特定实体)是我应该在它之后调用 SubmitChanges。还有,当我在循环中调用一些这样的过程时,事务呢,我应该通过 Connection.BeginTransaction() 方法显式创建事务还是模型为我做呢?
再次,我知道当存储过程与模型中的某个实体链接时它是如何工作的,但现在我不会使用自定义存储过程来更新多个表中的记录。
感谢您的帮助!
【问题讨论】:
-
Linq-to-SQL 与存储过程的接口不太好 - 如果您认真使用存储过程,我建议“升级”到 .NET 4 中的实体框架 - 很多 更好地支持存储过程!
-
@marc_s,Linq-to-SQL 在哪些方面不能很好地与存储过程交互?
-
@Kirk Woll:两件主要的事情:首先,您不能从与模型中的实体不完全对应的存储过程返回结果集(EF 确实通过以下能力支持这一点为此定义特定的“复杂类型”),其次,您只能在 L2S 中执行存储过程,而在 EF4 中,您可以为每种实体类型分配存储过程,用于 INSERT、UPDATE、DELETE 操作(例如,您可以分配一个用于 DELETE 的存储过程,让 EF4 通过生成 SQL 代码语句来处理其他操作)
-
谢谢@marc_s,感谢您的回复。关于您的两点:1)Linq-To-Sql 要求将存储过程的结果映射到实体,但是没有理由不能为您的 SP 创建自定义类型(entiteis)并使用 @987654322 对其进行注释@、
[Column]和[Association]属性照常。我一直为返回自定义类型的 SP 这样做。 2)其实Linq-To-Sql确实支持插入/更新/删除的自定义SP:msdn.microsoft.com/en-us/library/bb546186.aspx -
有道理@marc_s,感谢您指出工具差距。
标签: linq-to-sql