1.设置数据库连接字符串
首先,在应用程序的配置文件中设置数据库连接字符串。这里以使用SQL Server为例,将连接字符串命名为“DefaultConnection”:
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=MyDatabase;Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
2.安装Entity Framework
接下来需要安装Entity Framework。可以通过NuGet来安装,打开Visual Studio的NuGet管理器,在搜索框中输入“EntityFramework”,然后点击安装。
3.新增存储过程实体类
使用Code First模式,首先需要定义实体类来映射数据库中的表和存储过程。可以使用自动迁移功能来为存储过程创建实体类。在项目的Package Manager Console中执行如下命令:
Scaffold-DbContext "Data Source=.\SQLEXPRESS;Initial Catalog=MyDatabase;Integrated Security=True" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
这个命令会使用数据库中的所有表和存储过程创建实体类。只要数据库中有存储过程,就会生成对应的方法。
4.调用存储过程
对于存储过程,可以直接在代码中使用实体类来进行调用。例如,假设有一个名为“GetProducts”的存储过程,可以使用下面的代码来调用:
using(var db = new MyContext())
{
var products = db.Products.FromSql("GetProducts").ToList();
}
其中,Products是自动生成的实体类。FromSql方法接收一个字符串参数,该参数为要执行的存储过程的名称。
5.传递参数
如果存储过程需要参数,可以在调用时传递参数,例如:
using(var db = new MyContext())
{
var categoryIDParam = new SqlParameter("@CategoryID", categoryID);
var products = db.Products.FromSql("GetProductsByCategoryID @CategoryID", categoryIDParam).ToList();
}
在这个例子中,由于存储过程需要一个名为“@CategoryID”的参数,所以需要创建一个SqlParameter对象,并将其传递给FromSql方法。在第二个参数中指定的参数名称需要与存储过程中指定的参数名称完全匹配。
6.示例
下面是一个完整的示例。假设项目中有一个名为“Product”的表,其中包含ID、Name和Description三个字段。在数据库中有一个名为“GetProductsByCategoryID”的存储过程,用于返回指定类别的产品。存储过程需要一个名为“@CategoryID”的参数。以下是对应的实体类定义:
using System.ComponentModel.DataAnnotations;
public class Product
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
以下是如何调用存储过程的代码:
using System.Data.SqlClient;
using(var db = new MyContext())
{
var categoryID = 1;
var categoryIDParam = new SqlParameter("@CategoryID", categoryID);
var products = db.Products.FromSql("GetProductsByCategoryID @CategoryID", categoryIDParam).ToList();
foreach(var product in products)
{
Console.WriteLine($"{product.ID} {product.Name} {product.Description}");
}
}
在这个例子中,首先创建了一个SqlParameter对象,其参数名为“@CategoryID”,参数值为1。然后使用该SqlParameter对象来调用存储过程,并返回所有符合指定类别的产品列表。最后迭代遍历所有的产品,输出ID、Name和Description字段。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Entity Framework使用Code First模式管理存储过程 - Python技术站