Подтвердить что ты не робот

Models.ApplicationDbContext для всех моделей в приложении Asp.Net MVC 5?

Я создаю веб-сайт Asp.Net MVC 5. Мне нужно добавить настраиваемые поля в ApplicationUser и связать (добавить внешние ключи) с другими моделями. Я думаю, мне нужно просто использовать один тип контекста. Тем не менее, эскиз кода уже генерирует следующий класс ApplicationDbContext. Могу ли я просто поместить все мои public DbSet<...> ... { get; set; } в класс? Или есть лучшая картина?

namespace MyApp.Models
{
    // You can add profile data for the user by adding more properties to your User class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
    public class ApplicationUser : User
    {  
    }

    public class ApplicationDbContext : IdentityDbContextWithCustomUser<ApplicationUser>
    {
    }
}
4b9b3361

Ответ 1

Существует отличное видео, объясняющее этот вопрос. Просто проверьте бесплатный курс ASP.NET MVC 5 "Основы" Скотта Аллена. Точный ответ здесь (начинается в 3:30).

Ответ 2

Я бы посоветовал держать их отдельно. На самом деле нет причин сочетать две части системы вместе. Чтобы добавить еще один DbContext, просто добавьте файл в модели под названием YourContext.cs.

public class YourContext: DbContext
{
    public YourContext() : base("name=YourContext")
    {
    }

    // Add a DbSet for each one of your Entities
    public DbSet<Room> Rooms { get; set; }
    public DbSet<Meal> Meals { get; set; }
}

Затем в корневой web.config

<add name="YourContext" connectionString="Data Source=(localdb)\v11.0; Initial Catalog=YourContext; Integrated Security=True"" providerName="System.Data.SqlClient" />

При запуске enable-migrations в консоли вам будет задан вопрос, какой dbcontext вы хотите перенести. Выберите YourContext.

РЕДАКТИРОВАТЬ: нет необходимости добавлять репозиции/единицы работы, которые Entity Framework делает для вас.

Ответ 3

Обратите внимание: это было написано как в бета2, где ALLOT изменился! Надеюсь, что большинство из них будут придерживаться, но никаких гарантий до RC не будет.

НЕ ИСПОЛЬЗУЙТЕ ящик пакета NuGET (до RC), так как он НЕ подбирает пакеты .NET 5, и он будет устанавливать EF 6 и испортить ваш проект. (Мы после EF 7)

В projects.json вам понадобятся следующие зависимости. (или бета2, когда он вышел, или последний на RC)

    "EntityFramework": "7.0.0-beta1",
    "EntityFramework.Relational": "7.0.0-beta1",
    "EntityFramework.Commands": "7.0.0-beta1",
    "EntityFramework.Migrations": "7.0.0-beta1",
    "EntityFramework.SqlServer": "7.0.0-beta1"

Добавьте новую папку DBContexts и добавьте острый файл с новыми материалами контекста.

  public class BlaBlaDB : DbContext
    {
        public DbSet<Models.MyOtherModel> MyOtherModels { get; set; }

        protected override void OnConfiguring(DbContextOptions options)
        {
            options.UseSqlServer();
        }
    }

а в вашем config.json обязательно добавьте строку подключения, точно такую ​​же, как IdentityDB, только с новым именем. Затем в startup.json зарегистрируйте свою базу данных.

 services.AddEntityFramework(Configuration)
                .AddSqlServer()
                .AddDbContext<DataContexts.IdentityDB>()
                .AddDbContext<DataContexts.BlaBlaDB>();

Это нужно скомпилировать, потому что k будет запускать этот проект и использовать запуск, чтобы внедрить ваш контекст, а затем выполнить все, что вам нужно. На данный момент у VS2015 Beta нет всех/или они не работают, команда для EF.

Вам нужно пойти и установить KRE для Windows.

Откройте командную строку, перейдите в каталог проекта, введите решение и введите следующие команды.

k ef context list
k ef migration add -c (context.from.above) initial
k ef migration apply -c (context.from.above)

Теперь у вас многоэкранная миграция. Просто продолжайте добавлять контекст и повторяйте это, когда вам это нужно. Я использовал это на localdb, как настройку проекта по умолчанию, чтобы он мог работать автономно в любой среде, например Linux.

Обратите внимание: вам все равно нужно создать Сервис, содержащий интерфейс и реализацию, а затем зарегистрировать это в startup.json Дополнительная информация здесь