По умолчанию приложение MVC 5 поставляется с этой частью кода в IdentityModels.cs - этот фрагмент кода предназначен для всех операций ASP.NET Identity для шаблонов по умолчанию:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
}
Если я подниму новый контроллер с помощью представлений с Entity Framework и создаю "Новый контекст данных..." в диалоговом окне, я получаю это для меня:
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; } - вот так:
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 Identity) наследуется от IdentityDbContext, который, в свою очередь, наследует от DbContext.
AllOtherStuffDbContext (для моих собственных вещей) наследуется от DbContext.
Итак, мой вопрос:
Какой из этих двух (ApplicationDbContext и AllOtherStuffDbContext) следует использовать для всех моих собственных моделей? Или я должен просто использовать автоматически созданный по умолчанию ApplicationDbContext, так как это не должно быть проблемой, если использовать его, поскольку он происходит из базового класса DbContext или будут некоторые накладные расходы? Вы должны использовать только один объект DbContext в вашем приложении для всех ваших моделей (я читал это где-то), поэтому я не должен даже рассматривать использование как ApplicationDbContext, так и AllOtherStuffDbContext в одном приложении? Или что лучше всего подходит для MVC 5 с идентификатором ASP.NET?