簡體   English   中英

ASP.Net MVC 5不起作用數據庫優先方法

[英]ASP.Net MVC 5 Doesn't work Database first method

我正在使用Entity Framework 6開發Asp.Net MVC 5應用程序。我正在使用DatabaseFirst方法,並且想使用標准的Microsoft.AspNet.Identity庫進行用戶身份驗證。

1)。 我已經創建了Asp.Net MVC 5項目。

2)。 將DefaultConnection更改為我的本地SQL Server。

3)。 運行應用程序以在服務器上生成數據庫。

4)。 在這個新數據庫中添加了我的新表。

5)。 從數據庫生成的模型。

當我嘗試從表中獲取一些數據時,出現一條錯誤消息:

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

上下文在Code First模式下與從EDMX文件生成的代碼一起用於Database First或Model First開發。 這將無法正常工作。 若要解決此問題,請不要刪除引發此異常的代碼行。 如果要使用數據庫優先或模型優先,請確保在啟動項目的app.config或web.config中包含Entity Framework連接字符串。 如果要創建自己的DbConnection,請確保它是EntityConnection而不是其他某種類型的DbConnection,並將其傳遞給采用DbConnection的基本DbContext構造函數之一。 要了解有關“代碼優先”,“數據庫優先”和“模型優先”的更多信息,請參見此處的實體框架文檔: 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; }
}

您確定使用相同的上下文嗎? 通常,UserManager將其自己的DbContext用於ApplicationUser。 檢查該DbContext的連接字符串。

這可能會有所幫助: 實體框架6和Asp.Net身份UserManager:多個DbContext

您將必須從IdentityDbContext繼承上下文類。 為此,您將必須更改t4模板文件...

  1. 打開Entities.tt文件
  2. 導航到該行...

    <#= Accessibility.ForType(container)#>局部類實體:DbContext

並將其更新為

<#=Accessibility.ForType(container)#> partial class Entities : IdentityDbContext<ApplicationUser>
  1. 保存文件並檢查生成的上下文類。 它應該是...

    公共部分類實體:IdentityDbContext <ApplicationUser> {公共實體():base(“名稱=實體”){}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM