C# MVC 5,EF 6无效列名';型号';

C# MVC 5,EF 6无效列名';型号';,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,在混合webforms和MVC的项目中解决了这个问题后,我现在启动了一个空项目,仍然看到“无效的列名'Model'。错误。barebones测试项目如下所示: VS2012->New Project->ASP.NET MVC 5空项目(Visual C#),命名为testef 我的数据上下文noscoxt.cs using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq;

在混合webforms和MVC的项目中解决了这个问题后,我现在启动了一个空项目,仍然看到“无效的列名'Model'。错误。barebones测试项目如下所示:

VS2012->New Project->ASP.NET MVC 5空项目(Visual C#),命名为testef

我的数据上下文noscoxt.cs

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;

namespace testef.Domain_Models
{
    public class NosContext : DbContext
    {
        public NosContext() : base("Name=NosContext")
        {

        }

        public DbSet<Nos_Templates> Templates { get; set; }
    }
}
using System;
using System.ComponentModel.DataAnnotations;

namespace testef.Domain_Models
{
    public class Nos_Templates
    {
        [Key]
        public Guid id { get; set; }
        public string template_name { get; set; }
        public string edit_region { get; set; }
        public string question_list { get; set; }
        public DateTime? create_date { get; set; }
        public Guid? creating_user { get; set; }
        public DateTime? update_date { get; set; }
        public Guid? updating_user { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using testef.Domain_Models;

namespace testef.Controllers
{
    public class HomeController : Controller
    {
        private NosContext db = new NosContext();

        // GET: /Home/
        public ActionResult Index()
        {
            return View(db.Templates.ToList());
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}
controllerHomeController.cs的索引方法

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;

namespace testef.Domain_Models
{
    public class NosContext : DbContext
    {
        public NosContext() : base("Name=NosContext")
        {

        }

        public DbSet<Nos_Templates> Templates { get; set; }
    }
}
using System;
using System.ComponentModel.DataAnnotations;

namespace testef.Domain_Models
{
    public class Nos_Templates
    {
        [Key]
        public Guid id { get; set; }
        public string template_name { get; set; }
        public string edit_region { get; set; }
        public string question_list { get; set; }
        public DateTime? create_date { get; set; }
        public Guid? creating_user { get; set; }
        public DateTime? update_date { get; set; }
        public Guid? updating_user { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using testef.Domain_Models;

namespace testef.Controllers
{
    public class HomeController : Controller
    {
        private NosContext db = new NosContext();

        // GET: /Home/
        public ActionResult Index()
        {
            return View(db.Templates.ToList());
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}
和web.config中的连接字符串

 <connectionStrings>
    <add name="NosContext" connectionString="Data Source=localhost;Initial Catalog=testdb;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>
当控制器执行返回视图(db.Templates.ToList());
时,它抛出异常-

无效的列名“Model”

描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源

异常详细信息:System.Data.SqlClient.SqlException:列名“Model”无效。“

我可以获取生成的SQL代码(从VS异常处理程序中抓取)并在SQL manager studio中针对DB运行,它运行得很好

我不理解这个错误,因为它表现为我在模型中指定了一个数据库表中不存在的列,或者在表中指定了一个模型中不存在的列。我尝试过先用手工和反向工程代码创建,不管是什么错误

你知道为什么它会在这样一个不存在的专栏上抛出一个错误吗

更新

我做了一个生成脚本来将表脚本化为新查询窗口,并创建了一个名为testEF的新数据库,并运行了创建脚本来生成所讨论的表。这个新数据库运行得很好,没有错误。这个不能解释为什么它不能在现有的数据库/表上工作,即使在运行所述脚本来删除/创建ta时也是如此数据库中的ble不工作。因此,SQL中似乎有问题,而不是代码

更新2

有几件东西歪斜了

  • 最初的DB creator没有定义任何主键,因此它不能很好地发挥作用,我想EF也因此经历了一段艰难的时光
  • 使用Code First工具没有生成一个正确的连接字符串(我没有更改任何内容,但我现在得到了正确的结果)H/T到@Uber Bot
在定义了正确的键并重新运行代码优先的现有db EF工具之后,我有了正确的模型和连接字符串,它可以在新的解决方案和初始不起作用的现有解决方案中工作


感谢所有的见解和提示。

为了向生成的模型添加其他字段,您应该创建一个分部类,例如:

您已生成此类:

    public partial class Nos_Templates
    {
        [Key]
        public Guid id { get; set; }
        public string template_name { get; set; }
        public string edit_region { get; set; }
        public string question_list { get; set; }
        public DateTime? create_date { get; set; }
        public Guid? creating_user { get; set; }
        public DateTime? update_date { get; set; }
        public Guid? updating_user { get; set; }
    }
要添加其他字段,应执行以下操作:

    public partial class Nos_Templates
    {
        public string testField { get; set; }   
    }

感谢所有回复。原始数据库中的表中似乎有问题。我执行了一个创建到->脚本,并在干净的数据库上运行它,解决方案可以正常工作。因此,要在现有数据库中删除/重新创建表,然后重新构建并从那里开始


如果我在DB表中找到了罪魁祸首,我会发布调查结果,以防万一其他人也有同样的问题。

尝试运行SQL Server Profiler以查看EF究竟生成了哪些SQL语句。选择[Extent1]。[id]作为[id],[Extent1]。[template\u name]作为[template\u name],[Extent1]。[edit\u region]作为[edit\u region],[Extent1]。[问题列表]为[问题列表],[Extent1]。[创建日期]为[创建日期],[Extent1]。[创建用户]为[创建用户],[Extent1]。[更新日期]为[更新日期],[Extent1]。[更新用户]为[更新用户]从[dbo]。[编号模板]为[Extent1]如您所见,字段模型不存在,也不在任何地方,但它一直在尝试使用它。@SouthPlatte您使用的是MSSQL还是MySQL?那么一定有其他代码您没有向我们展示。您发布的内容本身不可能生成该错误。@SouthPlatte可能是您的表有问题。您可以将解决方案上载到其他地方吗这里?我没有添加其他字段,也没有使用partial关键字changed nothing。EF声称我正在尝试选择名为“Model”的字段,该字段显然不在我的代码、表定义或任何地方。这就是我不明白EF从何处获取重影字段引用的原因。从它出现的连接字符串判断rs是代码优先的。在我将其引入这个测试项目之前,它开始于主项目中的代码优先。我对现有数据库进行了代码优先反向工程。目前没有定义与我希望最终使用的其他三个表中的任何一个表之间的关系。所以现在不是代码优先?在这种情况下,您需要修改您的数据库要包含元数据的连接字符串。例如,metadata=。\AdventureWorks.csdl |.\AdventureWorks.ssdl |.\AdventureWorks.msl;刚刚使用您提供的代码创建了一个空白项目。它可以工作。问题出在其他地方。