在我的代码中,我检查了DbSet的Local属性,以查看哪些实体已添加到DbContext中,但尚未提交给数据库。现在,我需要模拟该属性,但看来我做不到。这意味着当我测试代码时,它会失败,因为Local属性为null。有什么想法可以做到吗?我在下面添加了当前用于生成模拟dbset的代码,其中包括用于生成LocalView的代码,但是在调用构造函数时,此操作失败,并显示NotImplementedException()。
我正在使用最新版本的.Net Core和Entity Framework。
欢呼 标记
var localDbSet = new Mock<DbSet<TEntity>>();
var localList = new List<TEntity>().AsQueryable();
var mockDbSet = new Mock<DbSet<TEntity>>();
var queryableData = list.AsQueryable();
localDbSet.As<IQueryable<TEntity>>().Setup(m => m.Provider).Returns(localList.Provider);
localDbSet.As<IQueryable<TEntity>>().Setup(m => m.Expression).Returns(localList.Expression);
localDbSet.As<IQueryable<TEntity>>().Setup(m => m.ElementType).Returns(localList.ElementType);
localDbSet.As<IQueryable<TEntity>>().Setup(m => m.GetEnumerator()).Returns(localList.GetEnumerator());
mockDbSet.As<IQueryable<TEntity>>().Setup(m => m.Provider).Returns(queryableData.Provider);
mockDbSet.As<IQueryable<TEntity>>().Setup(m => m.Expression).Returns(queryableData.Expression);
mockDbSet.As<IQueryable<TEntity>>().Setup(m => m.ElementType).Returns(queryableData.ElementType);
mockDbSet.As<IQueryable<TEntity>>().Setup(m => m.GetEnumerator()).Returns(queryableData.GetEnumerator());
mockDbSet.Setup(d => d.Add(It.IsAny<TEntity>()));
// This fails with a NotImplementedException
var localView = new LocalView<TEntity>(localDbSet.Object);
mockDbSet.Setup(d => d.Local).Returns(localView);