如何在ASP.NET MVC中将原始SQL查询中的数据映射到Model属性?

时间:2016-04-27 18:49:12

标签: sql asp.net-mvc dbcontext

参考此帖子How to use raw normal sql in ASP.NET MVC without linq?

我知道如何使用DbContext将数据映射到Model属性并在Razor View中使用它们。但有时我确实需要使用复杂的原始SQL查询来从现有的数据库表中获取数据。从上面的链接我觉得我有了主意。 SQL to Model,这正是我需要的。但是,我的问题是,我需要在DbContext类中编写什么内容?

这是来自上述参考资料

static ArticlesDataContext dc = new 
ArticlesDataContext(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

在控制器中(......我认为),

var arts = dc.ExecuteQuery<Art>(@"Select * from articles");

我猜ArticlesDataContext类是这样的

public class ArticlesDataContext : DbContext
{
    public ArticlesDataContext() : base("name=ConnectionString")
    {
    }

    public DbSet<Article> Articles { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        ...
        // something here to map the DB table columns
    }
}

如果我需要在Controller中运行原始SQL查询来获取数据,我该怎么处理DbContext类,它应该用EF获取数据?我很困惑。

哦,是的,在SQL语句之前“@”做了什么?

我是ASP.NET MVC的新手,希望我的问题清楚。 THX。

1 个答案:

答案 0 :(得分:0)

DBContext用于将数据实体(您的数据库表)与模型(您创建的一些普通的旧c#对象)进行映射。即使您正在使用SQL,您仍然希望创建一个模型来包含SQL查询的结果。现在,您将“arts”定义为Query的结果列表。因此,艺术可能会是IEnumerable<art>类型,其中art是您创建的模型的名称。现在在您的DBContext中,执行以下操作:

public DbSet<art> arts { get; set; }