【问题标题】:Entity Framework 5 Ninject error实体框架 5 Ninject 错误
【发布时间】:2014-01-25 13:28:38
【问题描述】:

我正在处理这个错误:

类型的初始化程序发生异常 'System.Data.Entity.Internal.AppConfig'

使用:

  1. Visual Studio 2013 Ultimate
  2. 实体框架 5.0

说明:

我有一个控制台应用程序,它从这些层注入一些依赖项:
-域
-DAL
-服务

我使用这些模式:

-工作单元
-存储库
-控制反转

控制台应用程序尝试注入依赖项并查询我的数据库。

这是我在 App.config 中的 connectionString

<add name="ClockContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=Clock.LocalDb;Integrated Security=True"
  providerName="System.Data.SqlClient" />

这是我的上下文类:

public class ClockContext : DbContext
{
    //ClockContext
    public IDbSet<StampUnit> Stamps{ get; set; }


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }

    public void Commit()
    {
        SaveChanges();
    }
}

这是程序语法:

internal class Program
{
    private static void Main(string[] args)
    {
        //stamps: A collection that loads data from  other source

        var kernel = new StandardKernel(new StampsInitializerModule());
        var service = kernel.Get<IStampService>();//Here throws the exception
        foreach (var stamp in stamps)
        {
            var stampUnit = new StampUnit
            {
                ClockId = stamp.ClockId,
                WorkerId = stamp.WorkerId,
                Start = stamp.Start,
                End = stamp.End,
            };
            service.CreateStamp(stampUnit);//database query
            Console.WriteLine(stampUnit);
        }
    }
}

这是 Ninject 的模块语法:

   class StampsInitializerModule : NinjectModule
{
    public override void Load()
    {
        Bind<DbContext>().To<ClockContext>();

        //DbFactory DI
        Bind<IDbFactory>().To<DbFactory>();

        //UnitOfWork DI
        Bind<IUnitOfWork>().To<UnitOfWork>();


        #region Repositories DI

        Bind<IStampRepository>().To<StampRepository>();

        #endregion


        #region Services DI

        Bind<IStampService>().To<StampService>();   

        #endregion
    }
}

【问题讨论】:

  • 检查您获得的 TypeInitializationException 的 InnerExceptions,然后提供更多详细信息。这个问题很可能与 Ninject 无关,而是一些错误配置

标签: entity-framework-5 ninject runtime-error console-application


【解决方案1】:

遵循@cvbarros 的指示,再次感谢。
我在调试时检查了我的 InnerMessage,发现 App.config 文件存在一些问题。
因为,之前我使用 SqlCompact 来测试我的数据,并且我没有暂停就更改为 LocalDb,所以需要添加这些行才能使应用程序能够运行。

这些被遗漏了:

  • configSections
  • 连接字符串
  • 默认连接工厂

添加

    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections> 

添加

  <connectionStrings>
    <add name="Clock.DoReading.Properties.Settings.Setting" connectionString="Data Source=(localdb)\v11.0;Initial Catalog=Clock.LocalDb;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

添加

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>    
  </entityFramework>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多