Лук Архитектура Единица рабочей транзакции не получает строку подключения

Я использую Onion Architecture с Autofac. В моем коде внедрения зависимостей я использую:

[assembly: WebActivatorEx.PostApplicationStartMethod(typeof(IocConfig), "RegisterDependencies")]
namespace AppMVC.Infrastructure.Bootstrapper
{
    public class IocConfig
    {
        public static void RegisterDependencies()
        {
            var builder = new ContainerBuilder();
            builder.RegisterType(typeof(UnitOfWork)).As(typeof(IUnitOfWork)).InstancePerHttpRequest();

            builder.Register<IEntitiesContext>(b =>
            {
                var context = new MyContext("My Connection String");
                return context;
            }).InstancePerHttpRequest();
         }
     }
}

Код единицы работы:

    public class UnitOfWork : IUnitOfWork
    {
        private readonly IEntitiesContext _context;
        private bool _disposed;
        private Hashtable _repositories;

        public UnitOfWork(IEntitiesContext context)
        {
            _context = context;
        }

        public int SaveChanges()
        {
            return _context.SaveChanges();
        }

        public IRepository<TEntity> Repository<TEntity>() where TEntity : BaseEntity
        {
            if (_repositories == null)
            {
                _repositories = new Hashtable();
            }
            var type = typeof(TEntity).Name;
            if (_repositories.ContainsKey(type))
            {
                return (IRepository<TEntity>)_repositories[type];
            }
            var repositoryType = typeof(EntityRepository<>);
            _repositories.Add(type, Activator.CreateInstance(repositoryType.MakeGenericType(typeof(TEntity)), _context));
            return (IRepository<TEntity>)_repositories[type];
        }

        public void BeginTransaction()
        {
            _context.BeginTransaction();
        }

        public int Commit()
        {
            return _context.Commit();
        }

        public void Rollback()
        {
            _context.Rollback();
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        public virtual void Dispose(bool disposing)
        {
            if (!_disposed && disposing)
            {
                _context.Dispose();
                foreach (IDisposable repository in _repositories.Values)
                {
                    repository.Dispose();// dispose all repositries
                }
            }
            _disposed = true;
        }
    }

MyContext Code:

public class MyContext : DbContext, IEntitiesContext
{
    private ObjectContext _objectContext;
    private DbTransaction _transaction;

    public MyContext(string nameOrConnectionString)
        : base(nameOrConnectionString)
    {            

    }

    public void BeginTransaction()
    {
        _objectContext = ((IObjectContextAdapter)this).ObjectContext;
        if (_objectContext.Connection.State == ConnectionState.Open)
        {
            if (_transaction == null)
            {
                _transaction = _objectContext.Connection.BeginTransaction();
            }

            return;
        }

        _objectContext.Connection.Open(); // At this Line, I am getting Exception
        if (_transaction == null)
        {
            _transaction = _objectContext.Connection.BeginTransaction();
        }
    }

    public int Commit()
    {
        var saveChanges = SaveChanges();
        _transaction.Commit();
        return saveChanges;
    }

    public void Rollback()
    {
        _transaction.Rollback();
    }
}

Моя проблема в _objectContext.Connection.Open();, Я получаю сообщение об ошибке в строке подключения.

Ниже приведен скриншот исключения:

0 ответов

Другие вопросы по тегам