C# 添加控制器时无法检索模型的元数据
作为一名新手,我正在“Visual Studio 2015社区”上学习ASP.NET MVC 5。我正在尝试添加一个带有实体框架模型的控制器 然后出现一个错误。我很困惑 这是我的密码:C# 添加控制器时无法检索模型的元数据,c#,asp.net,asp.net-mvc,entity-framework,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,作为一名新手,我正在“Visual Studio 2015社区”上学习ASP.NET MVC 5。我正在尝试添加一个带有实体框架模型的控制器 然后出现一个错误。我很困惑 这是我的密码: using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Syst
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>
任何答案都将被告知。谢谢。这是因为控制器支架无法正确识别web.config文件中的连接字符串
在Web.config中,将第二个providerName设置为与第一个providerName相同,并在创建控制器后撤消该设置
i、 e
现在恢复到原来的状态
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=*.*.*.*;Database=database_name;uid=sa;pwd=******;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
这是因为控制器支架无法正确识别web.config文件中的连接字符串
在Web.config中,将第二个providerName设置为与第一个providerName相同,并在创建控制器后撤消该设置
i、 e
现在恢复到原来的状态
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=*.*.*.*;Database=database_name;uid=sa;pwd=******;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
尝试更新您的Twilio类,如follow,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; }
}
尝试更新您的Twilio类,如follow,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; }
}
MVC 5/EF 6
也许您可以在旧版本中执行此操作
注释掉web/app.config中的连接字符串,然后保存
让VS创建一个“新”dbcontext项,而不是选择您已经拥有的项目
创造
删除新的dbcontext类
将控制器dbcontext替换为您的
在web/app.config中取消注释连接字符串,然后保存
为我工作 MVC 5/EF 6
也许您可以在旧版本中执行此操作
注释掉web/app.config中的连接字符串,然后保存
让VS创建一个“新”dbcontext项,而不是选择您已经拥有的项目
创造
删除新的dbcontext类
将控制器dbcontext替换为您的
在web/app.config中取消注释连接字符串,然后保存
为我工作 在我的例子中,数据上下文类缺少一些信息。对于犯了这个简单错误的人:
在数据上下文类字段中,我选择了add按钮并创建了一个新的临时DbContext。“检索元数据”错误未弹出,脚手架已创建
然后,我进入了新创建的“临时”DbContext,注意到一些自动生成的DbSet方法在我的原始DbContext中丢失了。将这些添加到原始的并重试创建脚手架中,结果成功了
在我的例子中,数据上下文类缺少一些信息。对于犯了这个简单错误的人:
在数据上下文类字段中,我选择了add按钮并创建了一个新的临时DbContext。“检索元数据”错误未弹出,脚手架已创建
然后,我进入了新创建的“临时”DbContext,注意到一些自动生成的DbSet方法在我的原始DbContext中丢失了。将这些添加到原始的并重试创建脚手架中,结果成功了
我想我只是犯了同样的错误:
在我的案例中,原因在于我的零件模型:
public int OperationSetId { get; set; }
[ForeignKey("OperationSetId")]
public OperationSet OperationSet { get; set; }
因为我使用以下方法创建了数据库:
enable-migrations
add-migration initial
update-database
在控制台中,IdentityModels.cs中的表不是为我自动生成的(如果我运行程序,它们会自动生成)
要修复错误,我插入了这一行:
public DbSet<OperationSet> OperationSet { get; set; }
在你的控制台里。现在您应该能够创建控制器了,因为您的模型没有引用不存在的表 我想我也犯了同样的错误:
在我的案例中,原因在于我的零件模型:
public int OperationSetId { get; set; }
[ForeignKey("OperationSetId")]
public OperationSet OperationSet { get; set; }
因为我使用以下方法创建了数据库:
enable-migrations
add-migration initial
update-database
在控制台中,IdentityModels.cs中的表不是为我自动生成的(如果我运行程序,它们会自动生成)
要修复错误,我插入了这一行:
public DbSet<OperationSet> OperationSet { get; set; }
在你的控制台里。现在您应该能够创建控制器了,因为您的模型没有引用不存在的表 您需要添加相反的关系来创建类似
ICollection<Twilio> twilio
i收集斜纹布
在ApplicationUser类中。您需要添加相反的关系以创建类似
ICollection<Twilio> twilio
i收集斜纹布
在ApplicationUser类中。您可能已经这样做了,但为了安全起见。您是否尝试过重建项目,然后再次尝试搭建脚手架?@haseebahmed7是的,我尝试过重建和清理项目,但都不起作用!您是否将web项目设置为启动项目?有时它只在启动项目中查找连接字符串。您可能已经这样做了,但为了安全起见。您是否尝试过重建项目,然后再次尝试搭建脚手架?@haseebahmed7是的,我尝试过重建和清理项目,但都不起作用!您是否将web项目设置为启动项目?有时,它只在启动项目中查找连接字符串。我刚刚删除了[ForeignKey]属性,它就工作了。但是我如何将foreignkey添加到该类中?您不需要为类添加key,否则foreignkey EF将自动计算出类的key,当看到ApplicationUser时,它将为我们这些被迫显式执行操作的人添加foreignkey:而不是删除foreignkey引用,确保它在您的上下文类中有相应的DbSet。这是正确的答案。带有userId属性的virtualapplicationuser属性允许框架按约定正确添加foreignkey。但是我如何将foreignkey添加到该类中?您不需要为类添加key,否则foreignkey EF将自动计算出类的key,当看到ApplicationUser时,它将为我们这些被迫显式执行操作的人添加foreignkey:而不是删除foreignkey引用,