C#Entity Framework原始SQL查询

时间:2017-03-08 06:12:50

标签: c# .net asp.net-mvc entity-framework-5

尝试解决一个简单的Web应用程序,我在Visual Studio 2017中创建了一个项目,当我使用与表对应的模型时,该项目工作正常(我遵循教程:https://msdn.microsoft.com/en-us/library/jj206878(v=vs.113).aspx )。

我想运行一个原始的sql查询,这样我就可以处理结果,操作并写回另一个表,或只显示结果

在我的控制器中我有:

    public ActionResult RunQuery001()
    {
        string query = "SELECT @@VERSION";
        return View(db.Servers.SqlQuery(query).ToArray());
    }

我创建了一个看起来像的视图:

    @model IEnumerable<omfgshootmenow.Server>

    @{
        ViewBag.Title = "RunQuery001";
    }

    @foreach (var item in Model)
    {
        @Html.DisplayFor(model => item.ToString());
    }

代码构建但是当我执行时,我得到一个例外:

消息=数据阅读器与指定的(此处的型号)不兼容类型的成员&#39; id&#39;在数据阅读器中没有相应的列具有相同的名称。

我一直认为视图是完全错误的(或整个事情是),因为异常引用了模型的键列。

感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

我确定这是因为您的数据形状与Server的类型不匹配。

当您查询db.Servers时,您必须返回与服务器匹配的内容。

如果要返回任何非实体类型,则应使用context.Database.SqlQuery。见这里:https://msdn.microsoft.com/en-us/library/jj592907(v=vs.113).aspx

答案 1 :(得分:0)

要获取字符串,应使用以下内容,请参阅为非实体类型编写SQL查询 here

部分
var query = db.Database.SqlQuery<string>("SELECT @@VERSION").FirstOrDefault(); 
ViewBag.SQLDBVersion= query; // viewbag is dynamic

观看

@MvcHtmlString.Create(ViewBag.SQLDBVersion)

答案 2 :(得分:0)

首先确保你的模型是IDENTICAL:我的意思是如果任何字段可以为空,它必须在你的模型中可以为空(更新你的模型)。另一个原因,尝试省略.ToArray(),将结果保存在变量中并检查ii.Maybe,出于测试原因,尝试使用其他方法获取日期(例如https://msdn.microsoft.com/en-us/library/fksx3b4f.aspx