1

イムthis Scott Allen tutorialヘルプは

私の現在のSqlUnitOfWorkを使用したUnitOfWorkパターンを実装しようとすることはfolowing

public class SqlUnitOfWork : IUnitOfWork { 

     public SqlUnitOfWork() { 
      var connectionString = 
       ConfigurationManager 
        .ConnectionStrings[ConnectionStringName] 
        .ConnectionString; 

      _context = new ObjectContext(connectionString); 
      _context.ContextOptions.LazyLoadingEnabled = true; 
     } 

     public IRepository<PhysicalTest> PhysicalTests 
     { 
      get { 
       if (_physicalTests == null) 
       { 
        _physicalTests = new SqlRepository<PhysicalTest>(_context); 
       } 
       return _physicalTests; 
      } 
     } 

     public IRepository<EHR> EHRs 
     { 
      get 
      { 
       if (_EHRs == null) 
       { 
        _EHRs = new SqlRepository<EHR>(_context); 
       } 
       return _EHRs; 
      } 
     } 



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

     SqlRepository<PhysicalTest> _physicalTests = null; 
     SqlRepository<EHR> _EHRs = null; 

     readonly ObjectContext _context; 
     const string ConnectionStringName = "default"; 
    } 

で、私の現在の接続文字列は、次の

<add name="default" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;MultipleActiveResultSets=True; initial catalog=MyAppDB" providerName="System.Data.SqlClient" /> 
です

mvcscaffoldingで作成されたコントローラーを使用しているコントローラーはうまく動作しますが、作業単位(whi何らかの理由でchは、MyAppDBContext()インスタンスを使用するのではなく、パラメータとしてconnectrion文字列を必要とします。

私は次のコードでcontrollr内部のアクションを呼び出すしようとすると、私が取得エラー:

public class PhysicalTestsController : Controller 
    { 
     private IUnitOfWork unitOfWork; 
     private IRepository<EHR> ehrRepository; 


     public PhysicalTestsController(IUnitOfWork unit) 
     { 
      unitOfWork = unit; 
      ehrRepository = unitOfWork.EHRs; 
     } 


     public ActionResult Index(int ehrId, int? page) 
     { 
      EHR ehr = ehrRepository.FindById(ehrId); 
      if (ehr.UserName != User.Identity.Name) 
       return View("Invalid Owner"); 
      const int pageSize = 5; 
      var physicaltests = ehr.PhysicalTests.OrderByDescending(test => test.CreationDate); 
      List<PhysicalTestListItem> physicalTestsVM = new List<PhysicalTestListItem>(); 
      Mapper.Map(physicaltests, physicalTestsVM); 
      var paginatedTests = new PaginatedList<PhysicalTestListItem>(physicalTestsVM, page ?? 0, pageSize); 
      return View(paginatedTests); 
     } 
} 

はあなたがObjectContextないDbContextを使用しているこの1

enter image description here

答えて

0

私は私のSqlRepositoryを変更されています。この変更は適切ではありませんか、これらのパターンの1

を破るなら、私を修正してください

public class SqlUnitOfWork : IUnitOfWork { 

     private SummumnetDB _context = new SummumnetDB(); 

     public IRepository<PhysicalTest> PhysicalTests 
     { 
      get { 
       if (_physicalTests == null) 
       { 
        _physicalTests = new SqlRepository<PhysicalTest>(_context); 
       } 
       return _physicalTests; 
      } 
     }..... rest of code here 

public class SqlRepository<T> : IRepository<T> 
            where T : class, IEntity { 

     internal SummumnetDB context; 
     internal DbSet<T> _objectSet; 

     public SqlRepository(SummumnetDB context) 
     { 
      this.context = context; 
      this._objectSet = context.Set<T>(); 
     } 

..... rest of my methods here 

} 

私SqlUnitofWorkを
-1

です。 ObjectContextEntityConnectionとそのSystem.Data.EntityClientプロバイダを使用します。接続文字列はdifferent formatです。

+0

私はあなたの答えをありがとう....あなたは私の答えを見ていただきたいですか? ..私はちょうど私の質問に提供したコードを保持する必要がありますと私は質問を明確にする必要がありますか? connectionstringまたはDbContextを使用して私の答えでコードを使用する.... – ignaciofuentes