我正在“Visual Studio 2015社区”上学习ASP.NET MVC 5作为新手。我正在尝试添加一个带有Entity Framework模型的控制器。
出现错误。我很困惑。
这是我的代码:
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();
}
}
}
到目前为止我尝试过:
任何答案都会得到赞赏。谢谢。
答案 0 :(得分:2)
这是由于Controller脚手架无法正确识别web.config文件中的连接字符串。
在Web.config中,将第二个providerName设置为与第一个providerName相同,并在创建控制器后,撤消该!
即
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=*.*.*.*;Database=database_name;uid=sa;pwd=******;" providerName="System.Data.SqlClient" />
</connectionStrings>
现在恢复原状
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=*.*.*.*;Database=database_name;uid=sa;pwd=******;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
答案 1 :(得分:1)
尝试更新你的Twilio Class,如下所示,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; }
}
答案 2 :(得分:0)
MVC 5 / EF 6
也许你可以在旧版本中做到这一点?
为我工作!
答案 3 :(得分:0)
就我而言,数据上下文类缺少一些信息。对于任何有这个简单错误的人:
答案 4 :(得分:0)
我的案例中的原因是我的Part模型:
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; }
在 ApplicationDbContext类
底部的 IdentityModels.cs 中根据您的需求调整此代码后,您需要:
add-migration migrationTitle
update-database
在你的控制台中。现在你应该能够制作控制器,因为你的模型没有引用一个不存在的表!
答案 5 :(得分:0)
您需要添加相反的关系来创建类似的控制器
ICollection<Twilio> twilio
在ApplicationUser类中。