ASP. NET Core MVC & C#: вставка данных в базу данных с использованием Entity Framework - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь вставить данные из моего ASP. NET Core MVC приложения с Entity Framework в мою SQL Серверную базу данных на локальном хосте.

Мой класс модели выглядит следующим образом:

public class Auto
{
    public string Motorleistung { get; set; }
    public string Lackierung { get; set; }
    public string Felgen { get; set; }
    public string Sonderleistungen { get; set; }
}

Я уже добавил DbContext в новую папку (Services/AutoContext класс):

public class AutoContext : DbContext
{
    DbSet<Auto> Autos { get; set; }

    public AutoContext(DbContextOptions<AutoContext> options)
        : base(options)
    {
        Database.EnsureCreated();
    }
}

Я добавил эту часть в файл Startup.cs в ConfigurateServices Метод:

public void ConfigureServices(IServiceCollection services)
{
        var connectionString = "Server=localhost;Database=Auto;User Id=sa;Password=YourPassword123";

        services.AddControllersWithViews();
        services.AddDbContext<AutoContext>(o => o.UseSqlServer(connectionString));
}

Я пытаюсь использовать расширение класса с методом для вставки свойств из auto в БД:

public static class AutoContextExtensions
{
    public static void CreateSeedData(this AutoContext context)
    {
        var auto = new List<Auto>()
            {
                new Auto()
                {
                    Motorleistung = "500 PS",
                    Lackierung = "Gelb",
                    Felgen = "Chrome",
                    Sonderleistungen = "Sitzheizung"
                }
            };
        context.AddRange(auto);
        context.SaveChanges();
    }
}

Я сейчас пытаюсь вызвать CreateSeedData функция из Startup.cs для передачи данных в мою базу данных, например:

Projectname.AutoContextExtensions.CreateSeedData();

Ожидается, что я дам параметр. Какой параметр я должен передать? (Я извлек код из образца)

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Вам нужен экземпляр контекста, чтобы иметь возможность вызывать метод расширения.

Существуют и другие рекомендуемые способы заполнения базы данных в EFCore

1 - используйте миграции для заполнения данных

Тогда миграции EF Core могут автоматически вычислять, какие операции вставки, обновления или удаления необходимо применить при обновлении базы данных до новой версии модели.

в OnModelCreating в DBContext

modelBuilder.Entity<Auto>().HasData( new Auto()  {
                    Motorleistung = "500 PS",
                    Lackierung = "Gelb",
                    Felgen = "Chrome",
                    Sonderleistungen = "Sitzheizung"
                });

Затем добавьте новую миграцию

2 - используйте контекст заполнения

using (var context = new DataSeedingContext())
{
    context.Database.EnsureCreated();

    var testBlog = context.Blogs.FirstOrDefault(b => b.Url == "http://test.com");
    if (testBlog == null)
    {
        context.Blogs.Add(new Blog { Url = "http://test.com" });
    }
    context.SaveChanges();
}

a Предупреждение от документов

Код заполнения не должен быть частью нормального выполнения приложения, так как это может вызвать проблемы параллелизма при работе нескольких экземпляров и также потребовать, чтобы приложение имело разрешение на изменение схемы базы данных.

Для получения дополнительной информации проверьте документацию вместе с полным примером проекта

0 голосов
/ 25 марта 2020

CreateSeedData - это метод расширения для типа AutoContext. Но вы вызываете метод наподобие Projectname.AutoContextExtensions.CreateSeedData (); поэтому вам нужно передать значение параметра типа autocontext. Вы должны создать переменную с типом AutoContext, затем variablename.CreateSeedData (), чтобы метод расширения работал так, как вы ожидаете

...