如何在新数据库中执行SQL查询?

时间:2019-04-19 01:20:13

标签: asp.net-mvc entity-framework-core-2.2

我的问题是这样的...我正在创建一个软件,在该软件中您具有业务的不同区域,而这些区域具有属性名称ConnectionString。

因此,当系统管理员想要了解该区域的某些特定信息时,他要做的就是注册一个SQL查询。

我的问题在于执行查询的逻辑。我正在创建一个新的DbContext并传递连接字符串,但是我找不到DbContext的函数来运行查询。

有人知道DbContext的任何功能来运行查询并获取结果吗?

1 个答案:

答案 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();

通过这种方式,您还可以访问或设置自定义模型,并执行查询或存储过程。

让我知道需要更多信息。