EF Code First не может заполнить базу данных [Консольное приложение] - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть консольное приложение, мне удалось создать базу данных с помощью Code First, но я не могу заполнить данные. Для этого я использую update-database в Package Manager Console. Пожалуйста помоги. Я ищу часы. Вот мой код:

/ Модели / ApplicationDbContext класс:

namespace ToDoApp.Models
{
    public class ApplicationDbContext : DbContext
    {
        public ApplicationDbContext()
           : base("ToDoApp")
        {
        Database.SetInitializer(new ApplicationDbInitializer());
        }

        public DbSet<TestModel> Tests { get; set; }
    }

}

/ Модели / ApplicationDbInitializer class:

 public class ApplicationDbInitializer : DropCreateDatabaseAlways<ApplicationDbContext>
 {
    protected override void Seed(ApplicationDbContext context)
    {
        context.Tests.AddOrUpdate(new TestModel()
        {
            Description = "Test1"
        });
       base.Seed(context);
    }
 }

/ Модели / TestModel класс:

public class TestModel
{
    [Key]
    public int Id { get; set; }

    public string Description { get; set; }
}

/ Класс программы:

    class Program
    {
    static void Main(string[] args)
        {
        Console.ReadLine();
        }
    }

/ App.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
    <!--<contexts>
      <context type="ToDoApp.Models.ApplicationDbContext, ToDoApp">
        <databaseInitializer type="ToDoApp.Models.ApplicationDbInitializer, ToDoApp" />  
      </context>
    </contexts>--> <!-- This don't work -->
 </entityFramework>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
  </dependentAssembly>
</assemblyBinding>
  </runtime>
  <appSettings>
   <add key="DatabaseInitializerForType ToDoApp.Models.ApplicationDbContext, ToDoApp"
     value="ToDoApp.Models.ApplicationDbInitializer, ToDoApp" />
  </appSettings> <!-- This don't work also -->
</configuration>

1 Ответ

0 голосов
/ 29 апреля 2018

update-database запустит миграцию Seed (). Ваш код для инициализатора Seed (), который запускается только при создании базы данных. См. здесь для объяснения различий.

Поскольку вы используете DropCreateDatabaseAlways, он должен запускаться каждый раз, когда меняется ваша модель. Вы можете просто удалить базу данных. В противном случае принудительно измените модель, а затем либо получите доступ к своему контексту в коде, либо вызовите context.Database.Initialize() при запуске.

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