【问题标题】:Entity Framework 4 error实体框架 4 错误
【发布时间】:2011-03-22 15:17:49
【问题描述】:

我使用实体框架代码优先方法创建了 MVC3 应用程序。我的模型很简单:

public class Employee
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int YearsAtCompany { get; set; }
}

上下文类是

public class EmployeeDB : DbContext
    {
        public DbSet<Employee> Employees { get; set; }
    }

控制器看起来像这样:

EmployeeDB context = new EmployeeDB();

        public ActionResult Index()
        {
            return View(context.Employees);
        }      
    }

我已经创建了EmployeesDb.mdf 和Employee 表。

但我收到此错误:

The model item passed into the dictionary is of type 'System.Data.Entity.DbSet`1[DFEmployees.Models.Employee]', but this dictionary requires a model item of type 'DFEmployees.Models.Employee'. 

[更新]

@model DFEmployees.Models.Employee

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

请提出解决方案。

【问题讨论】:

  • 您可以发布您要导航到的视图的代码吗?
  • 不确定,但是否可以将 View 键入为 Employee 而不是 IEnumerable
  • @Jason:我已经添加了视图代码。请检查一下

标签: asp.net-mvc-3 entity-framework-4


【解决方案1】:

看起来您的视图正在等待一个员工,而您正试图用员工的 DBSet 填充视图。

要解决这个问题,您可以将视图的@model 设置为员工的 IEnumerable,或者仅将一名员工发送到视图,具体取决于您在视图中显示的内容。

编辑:我认为这个问题与上一个问题无关。查看此链接,希望对您有所帮助:LINK

【讨论】:

  • @Darin 和@Jonathan:我使用了 FirstOrDefault(),现在我得到了这个异常:提供者没有返回 ProviderManifestToken 字符串。当我进一步按 F5 时,我得到:建立与 SQL Server 的连接时发生网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:共享内存提供者,错误:40 - 无法打开与 SQL Server 的连接)
【解决方案2】:

您的控制器操作返回一个员工列表,因此请分别在视图中调整您的模型:

@model IEnumerable<DFEmployees.Models.Employee>

或者,如果您想使用单个员工,请确保将单个员工传递给视图:

public ActionResult Index()
{
    return View(context.Employees.FirstOrDefault());
}

然后你可以拥有:

@model DFEmployees.Models.Employee

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2015-06-21
    • 1970-01-01
    相关资源
    最近更新 更多