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”不相容,不具有在具有相同名称的数据读取器的对应列。
我一直以为的观点是完全错误的(或整个事情是),因为异常参考模型的键列。
任何帮助表示赞赏。
得到一个字符串,下面应该使用,指节编写SQL查询的非实体类型here
var query = db.Database.SqlQuery<string>("SELECT @@VERSION").FirstOrDefault();
ViewBag.SQLDBVersion= query; // viewbag is dynamic
上查看
@MvcHtmlString.Create(ViewBag.SQLDBVersion)
,此后,它如何显示在视图中? – digitalohm
有很多方法可以参考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
非常感谢 – 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)
您可以尝试SELECT @@ VERSION作为mysqlver吗? – Anil
@AnilKumar同样的错误。我之前从阅读其他一些帖子,但没有骰子,尝试过。 – digitalohm
如果你的问题都是关于EF,为什么要混合使用mvc?考虑使用控制台应用代码? –