【问题标题】:SQL Server stored procedure and Linq-to-SQLSQL Server 存储过程和 Linq-to-SQL
【发布时间】:2010-10-21 09:31:01
【问题描述】:

我现在正在做一个项目,我们必须通过存储过程实现与数据库的所有通信。我们使用的是 Linq-to-SQL,因此所有数据库实体都已就位。我的问题是,如果可能的话,如何编写一个返回实体的存储过程。

例如,当用户使用用户名登录并通过时,我们对其进行验证,然后进行检查,但是我应该如何编写才能让存储过程返回一个 Employee 实体?

CREATE PROCEDURE GetLogin (
    @UserName NVARCHAR(50),
    @Password NVARCHAR(50))

【问题讨论】:

  • 我认为这不可能。
  • @Alexander:当然是 - 看我的回答...

标签: sql-server linq linq-to-sql stored-procedures


【解决方案1】:

您的GetLogin 程序做什么和/或返回什么??

当您将存储过程添加到 Linq-to-SQL 数据上下文时,您可以在属性窗口中定义“返回类型” - 如果您确定您的存储过程返回所有组成User 的属性,那么您可以将该存储过程的返回类型设置为User,然后这应该可以工作。

在这种情况下,您的代码将如下所示:

User found = ctx.GetLogin("YourUserName", "TOP$SECRET").SingleOrDefault();

如果在数据库中找到该用户,found 将包含该用户 - 否则,它将为 NULL。

更新:一旦你有了这样一个User 对象,你当然可以像使用任何其他Linq-to-SQL 对象一样使用它!

你可以修改属性:

found.UserName = "New User Name";
ctx.SubmitChanges();

或者你可以删除它:

ctx.Users.DeleteOnSubmit(found);
ctx.SubmitChanges();

您要返回的对象是一个 Linq-to-SQL 对象,就像任何其他对象一样!

【讨论】:

  • 您好,感谢您的帮助!当我将其更改为返回用户时,它就像一个魅力,所以现在它返回一个列表,我只选择第一个。但是如果我不确定我会得到什么回报,我如何以最好的方式与这些数据进行交互?例如,如果我想返回一个像上面这样的用户,但是有一个错误,然后我希望程序返回一个带有错误消息的字符串,我应该如何处理呢? //谢谢
  • @Fore:在这种情况下,使用该错误消息引发异常,然后在您的应用程序中,捕获异常并将错误呈现给用户(类似于“未找到用户”) - 这就是做类似事情的标准 .NET 方式
  • 好的,所以一旦我有了这个用户,我是否可以编辑它,或者从数据库中删除它,而不需要借助数据库查找?我的意思是,它怎么知道它实际上是数据库中的有效用户?如果我以相同的形式传输数据,但数据库中实际上不存在这样的数据怎么办?在这种情况下,这将不再是一个真实的实体,而是一个具有零功能的简单数据结构(这是您从 LINQ to SQL 中的 SP 获得的)。这就是我在上面评论中的意思。
  • @Alexander:是的,是的!你可以做所有这些事情!查看我的更新 - 并亲自尝试!
  • 好的。感谢您的耐心等待 :)。肯定会在我的新项目中尝试这个。现在我远离数据库,使用模拟类。
猜你喜欢
  • 2012-08-14
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多