По умолчанию приложение 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?