.net 带有存储库和UnitOfWork的EF CodeFirst CTP5:System.InvalidOperationException(…不属于…当前上下文…)

.net 带有存储库和UnitOfWork的EF CodeFirst CTP5:System.InvalidOperationException(…不属于…当前上下文…),.net,ef-code-first,.net,Ef Code First,我正在测试EF CodeFirst CTP5,并试图实现工作单元和存储库模式。但当我运行一个简单的测试时,我得到: System.InvalidOperationException:实体类型日志不是当前上下文的模型的一部分 数据库get是由EF创建的,当我调用.Add()时失败 似乎没有使用相同的上下文,但我不明白为什么 希望有聪明人来救我 提前感谢您抽出时间 下面是一些代码: 日志文本 public class LogCabinContext : DbContext, IUnitOfWork

我正在测试EF CodeFirst CTP5,并试图实现工作单元和存储库模式。但当我运行一个简单的测试时,我得到:

System.InvalidOperationException:实体类型日志不是当前上下文的模型的一部分

数据库get是由EF创建的,当我调用.Add()时失败 似乎没有使用相同的上下文,但我不明白为什么

希望有聪明人来救我
提前感谢您抽出时间

下面是一些代码:

日志文本

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

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

    }

    #region IUnitOfWork Members

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

    #endregion
}
基本存储库

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
}
public类BaseRepository:IBaseRepository其中T:EntityBase
{
公共日志文本(工作单元);;
私有数据库集_DbSet;
公共基础存储库(IUnitOfWork unitOfWork)
{
如果(unitOfWork==null)
抛出新的NullReferenceException(“UnitOfWork不能为null”);
_unitOfWork=作为LogCabinText的unitOfWork;
_dbSet=_unitOfWork.Set();
}
#区域IBaseRepository成员
公共T GetById(int-id)
{
返回_dbSet.SingleOrDefault(x=>x.Id==Id);
}
公共无效添加(T实体)
{
_添加(实体);
}
公共作废删除(T实体)
{
_删除(实体);
}
公共IEnumerable列表()
{
return _dbSet.OrderBy(x=>x.Id).AsEnumerable();
}
公共I工作单元CurrentUnitOfWork
{
获取{return\u unitOfWork;}
}
#端区
#区域IDisposable成员
公共空间处置()
{
_unitOfWork.Dispose();
}
#端区
}
SimpleTest,使用Ninject来构建上下文,这在我创建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);
        }
   }
}
[TestFixture]
公共类LogRepositoryTests
{
IKernel_内核;
[设置]
公共作废设置()
{
_kernel=新的标准内核(newdatabasemodule());
}
[撕裂]
公共无效拆卸()
{
_Dispose();
}
公共ILogRepository GetLogRepository()
{
ILogRepository logRepo=_kernel.Get();
返回logRepo;
}
[测试]
公开无效测试()
{
使用(ILogRepository repo=this.GetLogRepository())
{
Log myLog=新日志();
myLog.Application=“Test”;
myLog.Date=DateTime.Now;
myLog.Exception=“异常消息”;
myLog.Machinename=“本地”;
myLog.Message=“测试”;
myLog.Stacktrace=“Stacktrace”;
回购增加(myLog);
}
}
}
ILogRepository,现在只是从base派生出来的

public interface ILogRepository : IBaseRepository<Log>
{
}
公共接口ILogRepository:IBaseRepository
{
}

此处回答:

此处回答:

我在应用程序中遇到类似的异常。你找到原因了吗?我的申请中也有类似的例外。你找到原因了吗?