使用在Entity Framework中注入参数的自定义构造函数创建DbContext

时间:2016-06-26 19:46:10

标签: c# .net entity-framework

我正在开发一个代码优先的数据库,但是当我尝试“Update-Database”时,我收到以下错误。

The target context 'AllMid.DL.Repository.Implementation.AllMidContext' is not constructible. 
Add a default constructor or provide an implementation of IDbContextFactory.

现在很明显我的问题是我没有默认构造函数或IDbContextFactory接口的实现,但在我正在使用的示例项目中,我看到这样做没有。有谁知道怎么回事?

我目前有一个类似于此的DbContext。

internal class AllMidContext : DbContext, IAllMidContext
{
    public DbSet<TreeEntity> Tree { get; set; } 

    public AllMidContext(IConfigurationAccess configAccess) : base(configAccess.GetDefaultConnectionString())
    {
    }
}

应该通过结构图注入configAccess。

和像这样的DataContextAccess类

    internal class DataContextAccess : IDataContextAccess
    {
        private readonly IConfigurationAccess _configAccess;

        public DataContextAccess(IConfigurationAccess configAccess)
        {
            _configAccess = configAccess;
        }

        public IAllMidContext GetAllMidContext()
        {
            return new AllMidContext(_configAccess);
        }
    }

现在问题是有没有办法在没有默认构造函数或工厂的情况下执行此操作?我的依赖注入将始终输入参数,那么我如何让EF使用我的自定义构造函数?

1 个答案:

答案 0 :(得分:0)

我相信update-database正在寻找没有输入的构造函数。你能做的就是编写一个没有输入的构造函数,并在其体内进行注射。