【问题标题】:Linq-to-Sql execute custom stored procedure for update recordsLinq-to-Sql 为更新记录执行自定义存储过程
【发布时间】: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


【解决方案1】:

通过存储过程和 LINQ to SQL 更新非实体数据非常简单。只需将存储过程从服务器资源管理器拖到 DBML 设计器中的 空白空间 上(因此它不会尝试返回实体对象)并在代码中调用相关的生成方法,如下所示:

myDataContext.MyStoredProcedureMethod();

该操作会立即执行,因此您无需调用 SubmitChanges()。

要在 LINQ to SQL 事务中包装此调用(或循环,或其他),请参阅instructions and examples here 了解如何使用 LINQ to SQL 事务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多