我的问题是这样的...我正在创建一个软件,在该软件中您具有业务的不同区域,而这些区域具有属性名称ConnectionString。
因此,当系统管理员想要了解该区域的某些特定信息时,他要做的就是注册一个SQL查询。
我的问题在于执行查询的逻辑。我正在创建一个新的DbContext并传递连接字符串,但是我找不到DbContext的函数来运行查询。
有人知道DbContext的任何功能来运行查询并获取结果吗?
答案 0 :(得分:2)
如果您需要使用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>("GetStudentFees @studentId", studentId).ToList();
通过这种方式,您还可以访问或设置自定义模型,并执行查询或存储过程。
让我知道需要更多信息。