私は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>
{
}
を私は自分のアプリケーションで同様の例外を取得しています。理由を見つけましたか? – rovsen