添加控制器时无法检索模型的元数据
我正在学习作为新手的“Visual Studio 2015社区”上的ASP.NET MVC 5。我试图添加一个控制器与实体框架模型。添加控制器时无法检索模型的元数据
,并出现了错误。我很困惑。
这里是我的代码:
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();
}
}
}
我迄今为止尝试:
- ASP.NET MVC/EF Code First error: Unable to retrieve metadata for model
- Unable to retrieve metadata - MVC application
- Unable to Retrieve Metadata
- MVC4 Scaffolding Add Controller gives error "Unable to retrieve metadata..."
- Cannot create controller with Entity framework - Unable to retrieve metadata for ' '
任何答案将apprecited。谢谢。
尝试更新您的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; }
}
我刚刚删除了[ForeignKey]属性,它起作用。但是,如何将外键添加到该类中? –
你不需要把类的关键字或ForeignKey EF会自动找出类的关键,当看到ApplicationUser它将添加ForeignKey –
这是由于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>
MVC 5/EF 6
也许你可以在旧版本中做到这一点?
- 注释掉在web/app.config中的连接字符串,然后保存
- 已经VS创造,而不是选择一个“新”的DbContext项目你已经有了
- 创建
- 删除新的DbContext
- 替换控制器dbcontext与您的
- 取消注释web/app中的连接字符串。配置然后保存
为我工作!
在我的情况下,数据上下文类缺少一些信息。对于有这个简单错误的人:
- 在数据上下文类字段中,我选择了添加按钮并创建了一个新的临时DbContext。 '检索元数据'错误没有弹出,脚手架被创建。
- 然后我进入新创建的“临时”DbContext,并注意到一些自动生成的DbSet方法从我原来的DbContext中丢失。将这些添加到原来的和重新创建的脚手架中,并且工作。
您可能已经做到了这一点,但只是为了安全起见。你有没有尝试重建项目,然后再次尝试脚手架? – haseebahmed7
@ haseebahmed7是的,我已经尝试重建和清洁项目,但它不工作! –
http://*.com/questions/12546545/unable-to-retrieve-metadata –