2014-05-21 88 views
3

我還是MVC的新手,但我開始感受一般圖片,但我仍然混合像namespaceusing和我想這可能是這種情況,我在哪裏錯誤地引用某些東西。添加視圖 - 無法檢索元數據

問:我想添加一個EmployeeInfo圖,其中List模板,用模型類:EmployeeInfo,數據上下文類:MoviesEntities

的自動生成將不會執行。當我在Controller的方法EmployeeInfo中右鍵單擊時。我選擇「添加視圖」選項,填寫信息,然後點擊添加,並在腳手架載入屏幕期間,它給我錯誤如下。

有運行所選擇的代碼發生器的錯誤:「無法 檢索元數據爲‘WebApplication2.Models.EmployeeInfo’。」

我控制器

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()); 
      } 
    } 
} 

我的背景下EmployeeInfo

//------------------------------------------------------------------------------ 
// <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; } 
    } 
} 

型號:

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; } 
    } 
} 
+0

你的問題是什麼? –

+0

我正在爲EmployeeInfo進行查看 – Austin

+0

您的問題是什麼?因爲上次我檢查「不起作用」是**不是**問題。 –

回答

0

問題是EmployeeInformation僅僅是控制器從View的查詢中轉儲數據的「模板」。

EmployeeInformation實際上並不是一個現有的表,因此我不得不建立一個模型,即EmpleeInfoModels來保存數據,然後傳遞給我的自定義視圖。

方法

public ActionResult EmployeeInformation() 
     { 
      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 EmployeeInfoModels() { Name = e.Name, RoleType = r.RoleType, Birthdate = e.Birthday, eID = e.ID }; 

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

型號

namespace WebApplication2.Models 
{ 
    public class EmployeeInfoModels 
    { 
     public int mID { get; set; } 
     public int eID { get; set; } 
     public string Name { get; set; } 
     public string RoleType { get; set; } 
     public DateTime Birthdate { get; set; } 
    } 
} 

而我查看剛剛在

@model IEnumerable<WebApplication2.Models.EmployeeInfoModels> 
2

首先要確保重建方案。如果你只是添加了一個新的類,腳手架引擎可能實際上並不知道它,但是,如果該項目沒有編譯。

如果這樣不起作用,請關閉Visual Studio並重新啓動。我已經看到腳手架的東西在VS2012中沒有什麼好處,而重啓通常會解決它。

+0

我試過重新啓動但它沒有工作。另外,我似乎也找不到重建選項。在我們的視覺工作室2012上,它沒有MVC 5,所以我正在使用Web Express 2013進行這個練習項目。 – Austin

+0

FWIW,您可以在VS2012中使用MVC 5,您只需安裝更新的Web工具:http://www.microsoft.com/en-us/download/details.aspx?id=41532。至於2013年,Build菜單仍然存在,它始終存在,所以我不確定你在那裏會產生什麼困惑。 –

+0

哦,我可以建立,只是不重建哈哈。無論哪種方式,問題仍然存在:( – Austin

3

我做了什麼來解決這個問題,我將通過右鍵有支架的視圖時遇到帶單擊控制器操作是將「數據上下文類」字段留空。

enter image description here

我不能完全肯定,爲什麼這工作,但我發現這個方法從ASP.NET forums

+0

這是必填字段 – Toolkit

+0

@Toolkit並非在所有情況下。如果你低估了我的答案,我想知道原因,因爲答案可能適用於其他人。無論如何,感謝評論:) –

0

添加一個提示:如果您的web.config中的任何元素都有任何configSource屬性,則可能會出現此錯誤。我註釋掉了包含configSource屬性的所有元素,然後再次運行腳手架,它像魅力一樣工作。一旦完成,我取消了web.config中的元素的註釋,並且我全部設置了。

-1

檢查添加視圖流行winow您DataContextClass選項,然後糾正ConnectionString從控制器

Refer Screenshot 加入您的視圖時。