The model item passed into the dictionary is of type 'System.Collections.Generic.List' but this dictionary requires a model item of type 'System.Collections.Generic.IEnumberable'

Posted on 2014-03-18
Medium Priority
Last Modified: 2014-03-23
I have an MVC 4 application that has a model developed using EF 5.0 (Code First).  I am investigating TDD and had to make changes to the code generated by the model in order to get my unit tests to work.  Now that my unit tests work I am getting the following error when I try and run the application.

System.InvalidOperationException: The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[AppCatalog.Models.AppCatalog_Database]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[AppCatalogData.AppCatalog_Database]'.

Open in new window

Here is my controller:
namespace AppCatalog.Controllers
    public class DBCatalogController : Controller
        private IAppCatalog db { get; set; }

        public DBCatalogController(IAppCatalog dataContext = null)
            db = dataContext ?? new AppCatalogContainer();
        public DBCatalogController()
            db = new AppCatalogContainer();

        // GET: /DBCatalog/

        public ViewResult Index()
            ViewBag.Title = "Application Catalog -> Database Catalog";

            var appcatalog_database = db.AppCatalog_Database.Include(a => a.AppCatalog_ServerType);
            return View(appcatalog_database.ToList());

Open in new window

Here is the model definition in my view:
@model IEnumerable<AppCatalogData.AppCatalog_Database>

Open in new window

Here is my Interface definition:
namespace AppCatalog.Models 
    public interface IAppCatalog 
        IDbSet<AppCatalog_Database> AppCatalog_Database { get; set; }
        IDbSet<AppCatalog_ServerType> AppCatalog_ServerType { get; set; }
        IDbSet<AppCatalog_DBConnection> AppCatalog_DBConnection { get; set; }
        IDbSet<AppCatalog_Environment> AppCatalog_Environment { get; set; }
        IDbSet<AppCatalog_PIIData> AppCatalog_PIIData { get; set; }
        IDbSet<AppCatalog_Application> AppCatalog_Application { get; set; }
        IDbSet<AppCatalog_ApplicationTable> AppCatalog_ApplicationTable { get; set; }

        int SaveChanges();
        void Dispose();

Open in new window

Here is the AppCatalogContainer definition:
namespace AppCatalog.Models
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    public partial class AppCatalogContainer : DbContext, IAppCatalog
        public AppCatalogContainer()
            : base("name=AppCatalogContainer")
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
            throw new UnintentionalCodeFirstException();
        public IDbSet<AppCatalog_Database> AppCatalog_Database { get; set; }
        public IDbSet<AppCatalog_ServerType> AppCatalog_ServerType { get; set; }
        public IDbSet<AppCatalog_DBConnection> AppCatalog_DBConnection { get; set; }
        public IDbSet<AppCatalog_Environment> AppCatalog_Environment { get; set; }
        public IDbSet<AppCatalog_PIIData> AppCatalog_PIIData { get; set; }
        public IDbSet<AppCatalog_Application> AppCatalog_Application { get; set; }
        public IDbSet<AppCatalog_ApplicationTable> AppCatalog_ApplicationTable { get; set; }

Open in new window

I'm not sure what change I need to make to the View or the Controller to get this to work.  Everything worked fine until I made the changes for the unit testing.

Any help is greatly appreciated!
Question by:dyarosh
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
LVL 20

Expert Comment

by:Daniel Van Der Werken
ID: 39937343
Well, it looks like you are returning a List() and it is expecting an IEnumerable<> back.

So, I think these lines of code are the issue:

var appcatalog_database = db.AppCatalog_Database.Include(a => a.AppCatalog_ServerType);
return View(appcatalog_database.ToList());

Open in new window

Instead of doing the .ToList(), do as documented here:

I would do:

return View(appcatalog_database.IEnumerable<AppCatalogData.AppCatalog_Database>().GetEnumerator();

Open in new window

...or something like that. I don't have your code, so I can't fiddle with it.

Accepted Solution

dyarosh earned 0 total points
ID: 39937486
I found the problem.  I had to make sure my model derived from DbContext and my interface (IAppCatalog).

Author Closing Comment

ID: 39948428
I found the problem on my own.

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Just a quick little trick I learned recently.  Now that I'm using jQuery with abandon in my asp.net applications, I have grown tired of the following syntax:      (CODE) I suppose it just offends my sense of decency to put inline VBScript on a…
We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
This is my first video review of Microsoft Bookings, I will be doing a part two with a bit more information, but wanted to get this out to you folks.
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…
Suggested Courses

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question