0

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

所以当系统管理员想知道该区域的某些特定信息时,他所做的就是注册一个SQL查询。

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

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

4

1 回答 1

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>.FromSql("GetStudentFees @studentId", studentId).ToList();

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

让我知道需要更多信息。

于 2019-04-19T04:57:44.027 回答