IdentityModels.cs 中的这段代码带有默认 MVC 5 应用程序 - 这段代码适用于默认模板的所有 ASP.NET Identity 操作:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { public ApplicationDbContext() : base("DefaultConnection") { } }
如果我使用带有实体框架的视图构建一个新控制器并在对话框中创建一个“新数据上下文…”,我会为我生成这个:
using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Web; namespace WebApplication1.Models { public class AllTheOtherStuffDbContext : DbContext { // You can add custom code to this file. Changes will not be overwritten. // // If you want Entity Framework to drop and regenerate your database // automatically whenever you change your model schema, please use data migrations. // For more information refer to the documentation: // http://msdn.microsoft.com/en-us/data/jj591621.aspx public AllTheOtherStuffDbContext() : base("name=AllTheOtherStuffDbContext") { } public System.Data.Entity.DbSet<WebApplication1.Models.Movie> Movies { get; set; } } }
如果我使用 EF 搭建另一个控制器 + 视图,例如对于 Animal 模型,这条新行将在下面自动生成public System.Data.Entity.DbSet<WebApplication1.Models.Movie> Movies { get; set; }- 如下所示:
public System.Data.Entity.DbSet<WebApplication1.Models.Movie> Movies { get; set; }
using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Web; namespace WebApplication1.Models { public class AllTheOtherStuffDbContext : DbContext { // You can add custom code to this file. Changes will not be overwritten. // // If you want Entity Framework to drop and regenerate your database // automatically whenever you change your model schema, please use data migrations. // For more information refer to the documentation: // http://msdn.microsoft.com/en-us/data/jj591621.aspx public AllTheOtherStuffDbContext() : base("name=AllTheOtherStuffDbContext") { } public System.Data.Entity.DbSet<WebApplication1.Models.Movie> Movies { get; set; } public System.Data.Entity.DbSet<WebApplication1.Models.Animal> Animals { get; set; } } }
ApplicationDbContext(对于所有 ASP.NET 标识的东西)继承自IdentityDbContext,而后者又继承自DbContext. AllOtherStuffDbContext(对于我自己的东西)继承自DbContext.
ApplicationDbContext
IdentityDbContext
DbContext
AllOtherStuffDbContext
所以我的问题是:
我应该将这两个 (ApplicationDbContext和AllOtherStuffDbContext) 中的哪一个用于我自己的所有其他模型?或者我应该只使用默认的自动生成ApplicationDbContext,因为使用它应该不是问题,因为它是从基类派生的DbContext,还是会有一些开销?你应该DbContext在你的应用程序中为你的所有模型只使用一个对象(我在某处读过这个)所以我什至不应该考虑在一个应用程序中同时使用这ApplicationDbContext两者AllOtherStuffDbContext?或者在 MVC 5 中使用 ASP.NET Identity 的最佳实践是什么?
我将使用从 IdentityDbContext 继承的单个 Context 类。这样,您可以让上下文了解您的类与 IdentityDbContext 的 IdentityUser 和 Roles 之间的任何关系。IdentityDbContext 的开销很小,它基本上是一个带有两个 DbSet 的常规 DbContext。一个用于用户,一个用于角色。