Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

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
3
Medium Priority
?
4,943 Views
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!
0
Comment
Question by:dyarosh
[X]
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
3 Comments
 
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:
http://msdn.microsoft.com/en-us/library/bb739071(v=vs.110).aspx

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.
0
 

Accepted Solution

by:
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).
0
 

Author Closing Comment

by:dyarosh
ID: 39948428
I found the problem on my own.
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

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

Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled
Video by: ITPro.TV
In this episode Don builds upon the troubleshooting techniques by demonstrating how to properly monitor a vSphere deployment to detect problems before they occur. He begins the show using tools found within the vSphere suite as ends the show demonst…
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…

636 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