[英]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="
data source=.\SQL2012;
initial catalog=ETests;
integrated security=True;
MultipleActiveResultSets=True;
App=EntityFramework""
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模板文件...
導航到該行...
<#= Accessibility.ForType(container)#>局部類實體:DbContext
並將其更新為
<#=Accessibility.ForType(container)#> partial class Entities : IdentityDbContext<ApplicationUser>
保存文件並檢查生成的上下文類。 它應該是...
公共部分類實體:IdentityDbContext <ApplicationUser> {公共實體():base(“名稱=實體”){}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.