如何使用 Entity Framework 使用 SQL 服务器存储过程
How to work with SQL Server stored procedures using Entity Framework
我不熟悉使用存储过程和 Entity Framework 进行编程。我已经创建了一个 SQL 服务器数据库,其中包含一个名为 dbo.Book
的 table,它将保存书名和一个自动增量 ID 列。
我创建了一个存储过程来向 dbo.Book
和 return 新输入记录的 ID
列值插入记录:
USE [Testing1DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE dbo.uspAddBook
@title NVARCHAR(50),
@bookId INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO dbo.Book (TItle)
VALUES (@title)
SELECT @bookID = @@IDENTITY
END
当我进入 Visual Studio 并使用现有数据库将 Entity Framework 数据模型添加到我的 C# Windows Forms 项目时,它会生成与我的相关的 ...Context.cs
代码存储过程如下:
public virtual int uspAddBook(string title, ObjectParameter bookId)
{
var titleParameter = title != null ?
new ObjectParameter("title", title) :
new ObjectParameter("title", typeof(string));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("uspAddBook", titleParameter, bookId);
}
我的问题是,此方法需要 2 个参数。 1 是我可以从我的代码中传递的标题,另一个参数由 'bookId' 表示,我不知道它是什么,因为我想要的是只传递书名并获得 book_ID
在 return 中。所以,我无法调用 'uspAddBook' 方法,因为我不知道要将什么作为第二个参数发送。请帮我。
您可以设置一个 ObjectParameter
...
ObjectParameter bookId = new ObjectParameter("bookID", typeof(Int32));//check type
context.uspAddBook("Title", bookId);
Int newBookId = bookId.Value;
或者,您可以像这样使用 EF....
context.Book.AddObject(title);
context.SaveChanges();
Int bookId = title.bookId;
我还没有测试过这些,但它是正确的...
我不熟悉使用存储过程和 Entity Framework 进行编程。我已经创建了一个 SQL 服务器数据库,其中包含一个名为 dbo.Book
的 table,它将保存书名和一个自动增量 ID 列。
我创建了一个存储过程来向 dbo.Book
和 return 新输入记录的 ID
列值插入记录:
USE [Testing1DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE dbo.uspAddBook
@title NVARCHAR(50),
@bookId INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO dbo.Book (TItle)
VALUES (@title)
SELECT @bookID = @@IDENTITY
END
当我进入 Visual Studio 并使用现有数据库将 Entity Framework 数据模型添加到我的 C# Windows Forms 项目时,它会生成与我的相关的 ...Context.cs
代码存储过程如下:
public virtual int uspAddBook(string title, ObjectParameter bookId)
{
var titleParameter = title != null ?
new ObjectParameter("title", title) :
new ObjectParameter("title", typeof(string));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("uspAddBook", titleParameter, bookId);
}
我的问题是,此方法需要 2 个参数。 1 是我可以从我的代码中传递的标题,另一个参数由 'bookId' 表示,我不知道它是什么,因为我想要的是只传递书名并获得 book_ID
在 return 中。所以,我无法调用 'uspAddBook' 方法,因为我不知道要将什么作为第二个参数发送。请帮我。
您可以设置一个 ObjectParameter
...
ObjectParameter bookId = new ObjectParameter("bookID", typeof(Int32));//check type
context.uspAddBook("Title", bookId);
Int newBookId = bookId.Value;
或者,您可以像这样使用 EF....
context.Book.AddObject(title);
context.SaveChanges();
Int bookId = title.bookId;
我还没有测试过这些,但它是正确的...