Могу ли я сначала использовать метод переопределения OnModelCreating с БД - PullRequest
2 голосов
/ 07 мая 2019

Я пытаюсь интегрировать удостоверение asp.net в мой существующий проект. Сначала я работаю с базой данных, я НЕ использую edmx для генерации моделей и класса контекста, я создаю модели самостоятельно,

Теперь мой вопрос: могу ли я использовать метод override OnModelCreating в классе DbContext ИЛИ использовать его только для первого подхода к коду

1 Ответ

1 голос
/ 07 мая 2019

Да, вы можете. В конце концов, DbContext - это просто объектно-ориентированная модель ваших данных. Если генератор подмостил это для вас или вы вручную его создали, это не имеет значения. Я сам иду по этому маршруту. База данных уже существует и поддерживается с помощью проекта .sqlproj, и хотя она начиналась как код сначала, я переключился на полпути.

В качестве практического примера. Я использую OnModelCreating, чтобы настроить свои объекты:

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        //extracted m:n mapping for demonstration puporses
        builder.Entity<AppUserRole>(userRole =>
        {
            userRole.HasKey(ur => new { ur.UserId, ur.RoleId });
            userRole.HasOne(ur => ur.Role)
                .WithMany(r => r.UserRoles)
                .HasForeignKey(ur => ur.RoleId)
                .IsRequired();

            userRole.HasOne(ur => ur.User)
                .WithMany(r => r.UserRoles)
                .HasForeignKey(ur => ur.UserId)
                .IsRequired();
        });

        builder.ApplyConfiguration(new AppUserConfiguration());
        builder.ApplyConfiguration(new MapConfigConfiguration());
        builder.ApplyConfiguration(new MapWidgetConfiguration());
        builder.ApplyConfiguration(new WidgetConfiguration());
        builder.ApplyConfiguration(new LayoutMenuConfiguration());
        builder.ApplyConfiguration(new ImageConfiguration());
        builder.ApplyConfiguration(new FrontPageContentConfiguration());
    }
}

Для начала вы можете создать существующую базу данных с помощью консоли Nuget:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Foo;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

А затем, при необходимости, настройте его на свои нужды. Поэтому, если у вас есть json, сохраненный в поле nvarchar, добавьте преобразование, чтобы автоматически сопоставить его с конкретным типом:

public class LayerConfigurationConfiguration : IEntityTypeConfiguration<LayerConfiguration>
{
    public void Configure(EntityTypeBuilder<LayerConfiguration> builder)
    {
        builder.HasKey(lc => lc.Id);
        /* ... */
        builder.Property(lc => lc.LayerConfig).HasConversion(
            v => JsonConvert.SerializeObject(v, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }),
            v => JsonConvert.DeserializeObject<LayerConfig>(v)
        );
    }
}

Ссылка: https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...