C#实体框架原始的SQL查询

问题描述:

试图解决一个简单的Web应用程序,我创建在Visual Studio 2017年时,我使用的是与表对应型号的正常工作项目(我也跟着在教程:https://msdn.microsoft.com/en-us/library/jj206878(v=vs.113).aspx)。C#实体框架原始的SQL查询

我想只要运行一个原始的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()); 
    } 

的代码生成,但是当我执行我得到一个异常:

消息=数据读取器是与指定的(模型这里)的类型的部件,“ID”不相容,不具有在具有相同名称的数据读取器的对应列。

我一直以为的观点是完全错误的(或整个事情是),因为异常参考模型的键列。

任何帮助表示赞赏。

+0

您可以尝试SELECT @@ VERSION作为mysqlver吗? – Anil

+0

@AnilKumar同样的错误。我之前从阅读其他一些帖子,但没有骰子,尝试过。 – digitalohm

+0

如果你的问题都是关于EF,为什么要混合使用mvc?考虑使用控制台应用代码? –

得到一个字符串,下面应该使用,指节编写SQL查询的非实体类型here

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

上查看

@MvcHtmlString.Create(ViewBag.SQLDBVersion) 
+0

,此后,它如何显示在视图中? – digitalohm

+0

有很多方法可以参考http://www.c-sharpcorner.com/UploadFile/rohatash/options-for-passing-data-between-controller-to-view-in-mvc3/和http://stackoverflow.com/questions/11296634/pass-a-simple-string-from-controller-to-a-view-mvc3,我添加了一个答案。 – Anil

+0

非常感谢 – digitalohm

我宁愿相信这是因为你的数据的形状不匹配的Server类型。

当你查询db.Servers你必须返回一个服务器相匹配的东西。

如果你想回到你应该使用context.Database.SqlQuery,而不是任何非实体类型。在这里看到:https://msdn.microsoft.com/en-us/library/jj592907(v=vs.113).aspx

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