2016-09-28 106 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中丢失。将这些添加到原来的和重新创建的脚手架中,并且工作。
相关问题