2016-09-28 107 views
1

我正在學習作爲新手的「Visual Studio 2015社區」上的ASP.NET MVC 5。我試圖添加一個控制器與實體框架模型。添加控制器時無法檢索模型的元數據

enter image description here

,並出現了錯誤。我很困惑。

enter image description here

這裏是我的代碼:

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 
using System.Linq; 
using System.Web; 

namespace TwiApp.Models 
{ 
    public class Twilio 
    { 
     [Key] 
     public int id { get; set; } 
     public string userId { get; set; } 
     public string sid { get; set; } 
     public string authToken { get; set; } 
     public string fromNumber { get; set; } 
     public string toNumber { get; set; } 
     public bool status { get; set; } 
     [ForeignKey("userId")] 
     public virtual ApplicationUser twi_appuser_ref { get; set; } 
    } 
} 

我的連接字符串到SQL Server 2014:

<connectionStrings> 
    <add name="DefaultConnection" connectionString="Data Source=localhost;Initial Catalog=TwiAppDB;Integrated Security=True" 
    providerName="System.Data.SqlClient" /> 
</connectionStrings> 

最後,我databasecontext文件:

using Microsoft.AspNet.Identity.EntityFramework; 
using System; 
using System.Collections.Generic; 
using System.Data.Entity; 
using System.Data.Entity.ModelConfiguration.Conventions; 
using System.Linq; 
using System.Web; 
using TwiApp.Models; 

namespace TwiApp.DAL 
{ 
    public class DatabaseContext : IdentityDbContext<ApplicationUser> 
    { 
     public DatabaseContext() : base("DefaultConnection", throwIfV1Schema: false) 
     { 
     } 

     public DbSet<Twilio> Twilio_Db { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     {   
      modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
      base.OnModelCreating(modelBuilder); 
     } 

     public static DatabaseContext Create() 
     { 
      return new DatabaseContext(); 
     } 
    } 
} 

我迄今爲止嘗試:

  1. ASP.NET MVC/EF Code First error: Unable to retrieve metadata for model
  2. Unable to retrieve metadata - MVC application
  3. Unable to Retrieve Metadata
  4. MVC4 Scaffolding Add Controller gives error "Unable to retrieve metadata..."
  5. Cannot create controller with Entity framework - Unable to retrieve metadata for ' '

任何答案將apprecited。謝謝。

+0

您可能已經做到了這一點,但只是爲了安全起見。你有沒有嘗試重建項目,然後再次嘗試腳手架? – haseebahmed7

+0

@ haseebahmed7是的,我已經嘗試重建和清潔項目,但它不工作! –

+0

http://stackoverflow.com/questions/12546545/unable-to-retrieve-metadata –

回答

1

嘗試更新您的Twilio類像跟蹤和EF會找出鑰匙,關係:

public class Twilio 
{ 
    // [Key] 
    public int Id { get; set; } 
    public string sid { get; set; } 
    public string authToken { get; set; } 
    public string fromNumber { get; set; } 
    public string toNumber { get; set; } 
    public bool status { get; set; } 
    // [ForeignKey("userId")] 
    public string userId { get; set; } 
    public virtual ApplicationUser ApplicationUser { get; set; } 
} 
+0

我剛剛刪除了[ForeignKey]屬性,它起作用。但是,如何將外鍵添加到該類中? –

+0

你不需要把類的關鍵字或ForeignKey EF會自動找出類的關鍵,當看到ApplicationUser它將添加ForeignKey –

1

這是由於Controller腳手架無法正確識別web.config文件中的連接字符串。

在Web.config中,設置與第一個providerName相同的第二個providerName,並在創建控制器之後撤銷該操作!

<connectionStrings> 
    <add name="DefaultConnection" connectionString="Data Source=192.*.*.*;Database=database_name;uid=sa;pwd=******;" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

現在恢復到原來的

<connectionStrings> 
    <add name="DefaultConnection" connectionString="Data Source=192.*.*.*;Database=database_name;uid=sa;pwd=******;" providerName="MySql.Data.MySqlClient" /> 
</connectionStrings> 
0

MVC 5/EF 6

也許你可以在舊版本中做到這一點?

  1. 註釋掉在web/app.config中的連接字符串,然後保存
  2. 已經VS創造,而不是選擇一個「新」的DbContext項目你已經有了
  3. 創建
  4. 刪除新的DbContext
  5. 替換控制器dbcontext與您的
  6. 取消註釋web/app中的連接字符串。配置然後保存

爲我工作!

0

在我的情況下,數據上下文類缺少一些信息。對於有這個簡單錯誤的人:

  1. 在數據上下文類字段中,我選擇了添加按鈕並創建了一個新的臨時DbContext。 '檢索元數據'錯誤沒有彈出,腳手架被創建。
  2. 然後我進入新創建的「臨時」DbContext,並注意到一些自動生成的DbSet方法從我原來的DbContext中丟失。將這些添加到原來的和重新創建的腳手架中,並且工作。
相關問題