Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add View - Cannot retrieve Metadata

Tags:

c#

asp.net-mvc

I am still new to MVC, but I am starting to get a feel for the general picture however I still mixup things like namespace, or using and I THINK that may be the case here where I am mis-referencing something.

Question: I am trying to add an EmployeeInfo View, with a List template, with Model class: EmployeeInfo, with data context class: MoviesEntities

The auto-generation will not execute. When I right-click in Controller's method EmployeeInfo. I select the option "Add View", fill in the information, then hit add and during the scaffolding load screen it gives me the error as follows.

There was an error running the selected code generator: 'Unable to retrieve metadata for 'WebApplication2.Models.EmployeeInfo'.'

My controller

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 WebApplication2.Entities;
using WebApplication2.Models;

namespace WebApplication2.Controllers
{
    public class MoviesController : Controller
    {
        private MoviesEntities db = new MoviesEntities();

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

        public ActionResult EmployeeInfo()
        {  
            var query =
            from m in db.Movies
            join me in db.MovieEmployees 
            on m.ID equals me.movieID
            join e in db.Employees
            on me.employeeID equals e.ID
            join r in db.Roles
            on me.roleID equals r.ID

            select new EmployeeInfo() {Name = e.Name, Role = r.RoleType, Birthday = e.Birthday };

            return View(query.Distinct().ToList());
          }
    }
}

My context

//------------------------------------------------------------------------------
// <auto-generated> Built from database Movie </auto-generated>
//------------------------------------------------------------------------------

namespace WebApplication2.Entities
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    using movieLayer;
    using WebApplication2.Models;

    public partial class MoviesEntities : DbContext
    {
        public MoviesEntities()
            : base("name=MoviesEntities")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public virtual DbSet<Employee> Employees { get; set; }
        public virtual DbSet<Location> Locations { get; set; }
        public virtual DbSet<Movie> Movies { get; set; }
        public virtual DbSet<MovieEmployee> MovieEmployees { get; set; }
        public virtual DbSet<Role> Roles { get; set; }
        public virtual DbSet<Show> Shows { get; set; }
        public virtual DbSet<sysdiagram> sysdiagrams { get; set; }

        public System.Data.Entity.DbSet<WebApplication2.Models.EmployeeInfo> EmployeeInfoes { get; set; }
    }
}

Model of EmployeeInfo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.Web.Mvc;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace WebApplication2.Models


{
    public class EmployeeInfo
    {

        public EmployeeInfo() { }

        public string Name { get; set; }
        public string Role { get; set; }
        public DateTime Birthday { get; set; }
    }
}
like image 729
Austin Avatar asked Jun 24 '26 00:06

Austin


2 Answers

What I did to solve this issue that I encountered when adding a scaffolded view by right clicking the controller action was to leave the "Data context class" field blank.

enter image description here

I'm not entirely sure as to why this works but I found this method from ASP.NET forums.

like image 126
Chris Gong Avatar answered Jun 26 '26 15:06

Chris Gong


Make sure you rebuild your solution first. If you just added a new class, the scaffolding engine may not actually know about it, yet, if the project hasn't compiled.

If that doesn't work, close Visual Studio and restart. I have seen the scaffolding stuff just go wonky for no good reason in VS2012, and a restart will usually fix it.

like image 31
Chris Pratt Avatar answered Jun 26 '26 14:06

Chris Pratt



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!