Z.EntityFramework.Plus 확장을 사용할 때, Future ()뿐 아니라 플러스 (+) 확장이 사용되면 컨텍스트가 반환하는 것을 조롱하거나 대체 할 방법을 찾을 수 없습니다. 내가 시도한 모든 것은 z 확장 기능 라이브러리 내에서 NullReferenceException을 발생시킵니다.
저장소 예 :
public Task<DocumentDomain> GetDocuments(int id)
{
var futureQuery1 = _context.ReportTypes.Where(x => x.IsReadOnly).Future();
var futureQuery2 = _context.Reports.Where(x => x.CreateDate < DateTime.Now.AddDays(-10)).Future();
var futureQuery3 = _context.Person.DeferredFirstOrDefault(x => x.Id == id).FutureValue();
return new DocumentDomain(futureQuery1.ToList(), futureQuery2.ToList(), futureQuery3.Value);
}
단위 테스트 저장소 :
[Fact]
public async Task ShouldGetDocumentsForPerson1()
{
_context = Substitute.For<IMyDbContext>();
_context.ReportTypes = new FakeDbSet();
_context.ReportTypes.AddRange(GetFakeReportTypes());
// ...etc..arrange for Reports and Person
var repo = new DocumentRepository(_context);
// CRASHES HERE ON futureQuery1 at .Future()
var domain = await repo.GetDocuments(1); // fake id
Assert.IsTrue(domain.Documents.Count > 0);
}
선물을 사용하지 않고 잘 작동합니다. 나는 몇 가지 다른 방법을 조롱했지만 항상 오류가 발생했습니다. 대부분 "oops Z extensions에 오류가 발생했습니다"예외입니다.
나는 Z 확장이 실제 ObjectContext를 기대하고 있지만이를 극복 할 방법이 확실하지 않기 때문에 생각하고있다. 비슷한 문제를 경험 한 사람이 있습니까? 누구든지 어떤 해결책을 알고 있습니까? 감사.
미래 기능은 실제 ObjectContext
기대하고 있습니다. 컨텍스트를 찾을 수 없기 때문에 GetDbContext
메서드를 호출하면 현재 시나리오가 실패합니다.
나는 해결책을 모르고 있지만 일괄 처리하지 않고 모든 쿼리를 해결할 수있는 UseMockContext
와 같은 옵션을 추가하는 것이 가능할 수도 있습니다 (마치 미래의 기능을 사용하지 않는 것처럼).
이 옵션을 추가하면 현재의 문제를 해결할 수있는 것이 있는지 알려주십시오.
이 경우 https://github.com/zzzprojects/EntityFramework-Plus/issues 에서 문제를 만드는 것이 좋습니다.