在自定义初始值设定项的配置文件中设置DatabaseInitializerForType以触发

时间:2015-09-03 20:14:57

标签: c# ef-code-first initialization entity-framework-6 app-config

所以我要么开始出错,要么就是没有任何反应。我知道我有这样的自定义实体框架初始化器:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EasyEntity
{
    public class EasyInitializer : DropCreateDatabaseAlways<EasyContext>
    {
        protected override void Seed(EasyContext context)
        {
            List<Person> persons = new List<Person>
            {
                new Person { FirstName = "Waz", LastName = "Amattau"},
                new Person { FirstName = "Helena", LastName = "Handbasket"},
            };

            foreach (var person in persons)
                context.Person.Add(person);

            base.Seed(context);
        }
    }
}

当我很容易设置时,我可以这样说:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EasyEntity
{
    public class EasyContext : DbContext
    {
        public EasyContext() : base("name=EasyEntity")
        {
            Database.SetInitializer<EasyContext>(new EasyInitializer());   
        }

        public DbSet<Person> Person { get; set; }
    }
}

然而,这一切都在类库中,当我有一个控制台应用程序来测试它时,它不会在app.config中触发。我最终希望根据环境创建构建或不构建或应用程序来触发或不触发。在搜索互联网之后,似乎许多不同的人在此配置设置中标记并放置不同的文本。我根据NuGet使用Entity Framework 6.1.3,但配置和引用声明6.0.0并且想知道这是否已经改变以及如何从单独的项目中解雇它而无需硬件启动初始化器。我有这个:

<appSettings>
    <add key="DatabaseInitializerForType EasyEntity.EasyInitializer, EasyEntity" value="true" />
  </appSettings>

我尝试过设置&#39;值&#39;许多事情包括&#39;启用&#39; EasyEntity.EasyInitializer,EasyEntity&#39;,&#39; true&#39;,&#39; comeonpleasefire&#39;。但似乎没有任何工作,因为我不知道该怎么做。我看到另一篇博客将设置置于config部分的entityFramework节点中,但这也不起作用。我的控制台应用程序中的总配置设置供参考:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <appSettings>
    <add key="DatabaseInitializerForType EasyEntity.EasyInitializer, EasyEntity" value="true" />
  </appSettings>
  <connectionStrings>
    <add name="EasyEntity" providerName="System.Data.SqlClient" connectionString="Server=.;Database=Easy;Integrated Security=True;"/>
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="Data Source=.; Integrated Security=True; MultipleActiveResultSets=True" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

1 个答案:

答案 0 :(得分:0)

要回答您可以 appSettings 中设置初始值设定项的原始问题。 您可以使用反射来设置初始化程序,如下所示:

<appSettings>
<add key="DatabaseInitializerForType EasyEntity.EasyContext, EasyEntity" value="System.Data.Entity.DropCreateDatabaseAlways`1[[EasyEntity.EasyContext, EasyEntity]], EntityFramework" />

你可能会因为“禁用”而感到困惑。答案与将其设置为&#39;启用的答案大不相同或者&#39; true&#39;。如果你想运行种子&#39;您可以使用以下方法访问初始化程序类。

<appSettings>
<add key="DatabaseInitializerForType EasyEntity.EasyContext, EasyEntity"  value="EasyEntity.EasyInitializer, EasyEntity" />