我的问题是这样的......我正在创建一个软件,其中您有不同的业务领域,并且这些领域有一个属性名称 ConnectionString。
所以当系统管理员想知道该区域的某些特定信息时,他所做的就是注册一个SQL查询。
我的问题在于如何执行查询的逻辑。我正在创建一个新的 DbContext 并传递连接字符串,但我找不到 DbContext 的函数来运行查询。
有人知道 DbContext 的任何功能来运行查询并获得结果吗?
我的问题是这样的......我正在创建一个软件,其中您有不同的业务领域,并且这些领域有一个属性名称 ConnectionString。
所以当系统管理员想知道该区域的某些特定信息时,他所做的就是注册一个SQL查询。
我的问题在于如何执行查询的逻辑。我正在创建一个新的 DbContext 并传递连接字符串,但我找不到 DbContext 的函数来运行查询。
有人知道 DbContext 的任何功能来运行查询并获得结果吗?
如果您需要使用DbContext
对象在 Entity Framework Core 中执行原始查询,您可以像这样访问
用于访问原始查询
var students = context.Students
.FromSql("SELECT * FROM dbo.Students Where id = 1")
.ToList();
如果您的要求是访问或从存储过程中获取数据:
var students = context.Students
.FromSql("EXECUTE dbo.GetTopperStudents")
.ToList();
如果传递参数然后
var name = new SqlParameter("name", "abc");
var students = context.Students
.FromSql("EXECUTE dbo.GetTopperStudents @name",name )
.ToList();
如果执行命令插入/更新/删除则
var commandText = "INSERT Students (name) VALUES (@name)";
var name = new SqlParameter("@name", "Test");
context.Database.ExecuteSqlCommand(commandText, name);
如果您在不是您的模型中执行查询或存储过程,或者您添加自定义模型,那么您可以像查询一样执行
我的 studentFees 模型不是与数据库相关的任何模型。
public class StudentFees
{
public int StudentId { get; set; }
public string StudentName { get; set; }
public decimal Fees { get; set; }
public DateTime FeesDate { get; set; }
}
只需将您的查询添加到您的DbContext
OnModelCreating()
方法中
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Query<StudentFees>();
}
现在,如果您可以在自定义模型中访问和执行您的查询或存储过程
var studentId = new System.Data.SqlClient.SqlParameter("@studentId", 1);
var studentsFees = _dbContext.Query<StudentFees>.FromSql("GetStudentFees @studentId", studentId).ToList();
通过这种方式,您还可以访问或设置您的自定义模型并执行查询或存储过程。
让我知道需要更多信息。