【问题标题】:ASP.Net MVC 5 Doesn't work Database first methodASP.Net MVC 5 不起作用 数据库优先方法
【发布时间】:2014-12-04 13:34:20
【问题描述】:

我正在使用 Entity Framework 6 开发 Asp.Net MVC 5 应用程序。我正在使用 DatabaseFirst 方法,我想使用标准 Microsoft.AspNet.Identity 库进行用户身份验证。

1)。我已经创建了 Asp.Net MVC 5 项目。

2)。将 DefaultConnection 更改为我的本地 SQL 服务器。

3)。运行应用程序以在服务器上生成数据库。

4)。在这个新数据库中添加了我的新表。

5)。从数据库生成模型。

当我尝试从我的表中获取一些数据时,我收到一条错误消息:

    // GET: Tests
    public ActionResult Index()
    {
        return View(_repository.GetAllTests());
    }

上下文在 Code First 模式下使用,代码是从 EDMX 文件生成的,用于 Database First 或 Model First 开发。这将无法正常工作。要解决此问题,请不要删除引发此异常的代码行。如果您希望使用 Database First 或 Model First,请确保 Entity Framework 连接字符串包含在启动项目的 app.config 或 web.config 中。如果要创建自己的 DbConnection,请确保它是 EntityConnection 而不是其他类型的 DbConnection,并且将其传递给采用 DbConnection 的基本 DbContext 构造函数之一。要了解有关 Code First、Database First 和 Model First 的更多信息,请参阅此处的实体框架文档:http://go.microsoft.com/fwlink/?LinkId=394715

好的,我将连接字符串从:

<add name="Entities" connectionString="Data Source=.\SQL2012;
                                      Initial Catalog=ETests;
                                      Integrated Security=True" 
     providerName="System.Data.SqlClient" />

到

<add name="Entities"
     connectionString="metadata=res://*/Entities.csdl|
     res://*/Entities.ssdl|
     res://*/Entities.msl;
     provider=System.Data.SqlClient;
     provider connection string=&quot;
     data source=.\SQL2012;
     initial catalog=ETests;
     integrated security=True;
     MultipleActiveResultSets=True;
     App=EntityFramework&quot;"
     providerName="System.Data.EntityClient" />

现在我可以从我的表中获取数据,但我不能使用标准用户身份验证。我收到错误:

The entity type ApplicationUser is not part of the model for the current context.


var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); // In this line

那么,我做错了什么?如何编写正确的连接字符串?

更新: 我有标准的 DbContext:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("Entities", throwIfV1Schema: false)
    {
    }
    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

和模型自动生成的上下文:

public partial class Entities : DbContext
{
    public Entities()
        : base("name=Entities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<AspNetRole> AspNetRoles { get; set; }
    public virtual DbSet<AspNetUserClaim> AspNetUserClaims { get; set; }
    public virtual DbSet<AspNetUserLogin> AspNetUserLogins { get; set; }
    public virtual DbSet<AspNetUser> AspNetUsers { get; set; }
    public virtual DbSet<Document> Documents { get; set; }
    public virtual DbSet<Image> Images { get; set; }
    public virtual DbSet<Option> Options { get; set; }
    public virtual DbSet<Paragraph> Paragraphs { get; set; }
    public virtual DbSet<Question> Questions { get; set; }
    public virtual DbSet<Section> Sections { get; set; }
    public virtual DbSet<Test> Tests { get; set; }
}

【问题讨论】:

标签: c# asp.net asp.net-mvc entity-framework


【解决方案1】:

您确定使用的是相同的上下文吗?通常,UserManager 为 ApplicationUser 使用它自己的 DbContext。检查该 DbContext 的连接字符串。

这可能会有所帮助:Entity Framework 6 and Asp.Net Identity UserManager: Multiple DbContext

【讨论】:

  • 更新了主题。是的,我有两个上下文。
【解决方案2】:

您必须从 IdentityDbContext 继承上下文类。为此,您必须更改 t4 模板文件...

  1. 打开 Entity.tt 文件
  2. 导航到该行...

    部分类实体:DbContext

并将其更新为

<#=Accessibility.ForType(container)#> partial class Entities : IdentityDbContext<ApplicationUser>
  1. 保存文件并检查生成的上下文类。应该是……

    公共部分类实体:IdentityDbContext { 公共实体() :基地(“名称=实体”) { }

【讨论】:

  • 不,它不起作用。相同的错误消息 - 实体类型 ApplicationUser 不是当前上下文模型的一部分。
  • 尝试在 t4 模板中将 ":base("name=Entities")" 行更改为 ":base("Entities", throwIfV1Schema: false)"
  • 我认为,我必须使用两个连接字符串 - 一个用于 providerName="System.Data.SqlClient" 的身份,一个用于我的 providerName="System.Data.EntityClient" 的表。现在它正在工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 2013-01-20
  • 1970-01-01
相关资源
最近更新 更多