2010-12-20 14 views
1

私はEF CodeFirst CTP5をテストしており、作業単位およびリポジトリパターン。しかし、単純なテストを実行すると、次のようになります。RepositoryとUnitOfWorkを持つEF CodeFirst CTP5:System.InvalidOperationException(...現在のコンテキスト...の一部ではありません)

System.InvalidOperationException:エンティティタイプのログは、現在のコンテキストのモデルの一部ではありません。

データベースのは、EFによって作成され、私は.Add(呼び出すとき、それは失敗します) 同じコンテキストが使用されていないようですが、私はなぜ理解できませんか?

私を救助するために賢い人間が憧れている!
お時間をいただきありがとうございます。私はDB

[TestFixture] 
public class LogRepositoryTests 
{ 
    IKernel _kernel; 

    [SetUp] 
    public void SetUp() 
    { 
     _kernel = new StandardKernel(new DatabaseModule()); 
    } 

    [TearDown] 
    public void TearDown() 
    { 
     _kernel.Dispose(); 
    } 

    public ILogRepository GetLogRepository() 
    { 
     ILogRepository logRepo = _kernel.Get<ILogRepository>(); 

     return logRepo; 
    } 

    [Test] 
    public void Test() 
    { 
     using (ILogRepository repo = this.GetLogRepository()) 
     { 
      Log myLog = new Log(); 
      myLog.Application = "Test"; 
      myLog.Date = DateTime.Now; 
      myLog.Exception = "Exception message"; 
      myLog.Machinename = "local"; 
      myLog.Message = "Testing"; 
      myLog.Stacktrace = "Stacktrace"; 

      repo.Add(myLog); 
     } 
    } 
} 
を作成するので、これは動作しますが、コンテキストを構築するためにNinjectを使用して、SimpleTestの

LogCabinContext

public class LogCabinContext : DbContext, IUnitOfWork 
{ 
    public LogCabinContext() { } 

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

    } 

    #region IUnitOfWork Members 

    public void Save() 
    { 
     base.SaveChanges(); 
    } 

    #endregion 
} 

BaseRepository

public class BaseRepository<T> : IBaseRepository<T> where T : EntityBase 
{ 
    public LogCabinContext _unitOfWork; 
    private DbSet<T> _dbSet; 

    public BaseRepository(IUnitOfWork unitOfWork) 
    { 
     if (unitOfWork == null) 
      throw new NullReferenceException("UnitOfWork must not be null"); 

     _unitOfWork = unitOfWork as LogCabinContext; 
     _dbSet = _unitOfWork.Set<T>(); 
    } 

    #region IBaseRepository Members 

    public T GetById(int id) 
    { 
     return _dbSet.SingleOrDefault(x => x.Id == id); 
    } 

    public void Add(T entity) 
    { 
     _dbSet.Add(entity); 
    } 

    public void Delete(T entity) 
    { 
     _dbSet.Remove(entity); 
    } 

    public IEnumerable<T> List() 
    { 
     return _dbSet.OrderBy(x => x.Id).AsEnumerable(); 
    } 

    public IUnitOfWork CurrentUnitOfWork 
    { 
     get { return _unitOfWork; } 
    } 
    #endregion 

    #region IDisposable Members 

    public void Dispose() 
    { 
     _unitOfWork.Dispose(); 
    } 

    #endregion 
} 

:ここ

はいくつかのコードです

ILogRepositoryは、ちょうど今

public interface ILogRepository : IBaseRepository<Log> 
{ 
} 
+0

を私は自分のアプリケーションで同様の例外を取得しています。理由を見つけましたか? – rovsen

答えて

関連する問題