Entity Framework Code First Initial Создать - PullRequest
0 голосов
/ 26 сентября 2018

Я впервые пытаюсь создать веб-приложение (.net core 2.1) с нуля с Entity Framework.Почему-то я не могу сгенерировать БД.

Поэтому я установил EF nuget.И сделал следующие вещи:

Добавил класс, который унаследован от DbContext:

public class ApplicationDbContext:DbContext
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }

        public DbSet<Server> Servers { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Server>().HasData(
                new Server
                {
                    Name = "My Server",
                    InUse = false
                }
            );
        }
    }

И создал Entity:

public class Server
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public string Name { get; set; }
        public bool InUse { get; set; }
    }

В файле startup.cs в методе ConfigureServices я добавил:

var connectionString = Configuration.GetConnectionString("ApplicationConnection");
services.AddDbContext<ApplicationDbContext>
                    (options => options.UseSqlServer(connectionString));

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

Также я запускаю из консоли команду Add-Migration, поэтому у меня есть папка Migrations с миграцией InitialCreate и некоторым файлом снимка.

Но когда я запускаю приложение, я не получаю никакой ошибки, но оно никогда не достигает точки останова внутри InitialCreateМиграция .cs и т. д. никогда не создают БД.

Есть идеи, где и как мне их вызвать?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Так что я смог создать БД, добавив следующий код в Startup.cs в методе Configure ()

      using (var scope = app.ApplicationServices.CreateScope())
            {
                var dbContext = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
                dbContext.Database.Migrate();

                if (!dbContext.Servers.Any())
                {
                    dbContext.Servers.Add(new Server
                    {
                        Name = "My Server",
                        InUse = false
                    });
                    dbContext.SaveChanges();
                }

            }
0 голосов
/ 26 сентября 2018
  1. Если вы хотите, чтобы структура сущностей автоматически создавала вашу базу данных

    В файле конфигурации добавьте эту строку в конструктор: AutomaticMigrationsEnabled = true;

    Затем добавьте код в DBContext:

    Database.SetInitializer(new DropCreateDatabaseAlways<YourDbContext>());

    Затем, когда приложение уже запущено:

    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<YourDbContext>());

    Вы также можете посмотреть MigrateDatabaseToLatestVersion

  2. Если вы вручную отслеживаете версию базы данных:

    Обновление AutomaticMigrationsEnabled = false;

    Из консоли введите команду Update-Database, чтобы вручную перенести базу данных

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