2015-05-15 2 views
1

Я только что добавил GraphDiff в существующее решение Entity Framework, которое использует платформу Moq для тестирования. Все мои тесты, которые используют Moq в методах вставки и обновления, теперь терпят неудачу, поскольку метод _context.UpdateGraph вызывает следующее исключение: System.NullReferenceException: ссылка на объект не установлена ​​в экземпляр объекта. GraphDiff на GitHub https://github.com/refactorthis/GraphDiffИспользование Moq с EntityFramework graphdiff

UpdateGraph метод расширения: https://github.com/refactorthis/GraphDiff/blob/develop/GraphDiff/GraphDiff/DbContextExtensions.cs

Как вы должны Подвод Moq с GraphDiff?

+2

Вы должны включать более подробную информацию о внутренних исключениях, или, возможно, использовать Sorce код GrpahDiff вместо сборки угадать, где ошибка происходит от – JotaBe

+0

Edited ответа с подробной информацией о GraphDif гельфанд UpdateGraph метод расширения – vipasane

+1

Отказывание сущностей - это боль. Вам нужно высмеять ObjectContext, а также DbContext. GraphDiff использует ObjectContext. Я попытался, но в итоге использовал nuget Effort вместо https://effort.codeplex.com/ – mortb

ответ

1

У нас была эта проблема. Так мы это и решили.

Так что это в интерфейсе IContext:

T UpdateGraph<T>(T entity, Expression<Func<IUpdateConfiguration<T>, object>> mapping = null) where T : class, new(); 

DbEntityEntry<TEntity> Entry<TEntity>(TEntity entity) where TEntity : class; 
     DbEntityEntry Entry(object entity); 

     DbContextConfiguration Configuration { get; } 

Это в базовом контексте:

public virtual T UpdateGraph<T>(T entity, Expression<Func<IUpdateConfiguration<T>, object>> mapping = null) where T : class, new() 
     { 
      return null; 
     } 

и

private ObjectContext ObjectContext 
     { 
      get { return (this as IObjectContextAdapter).ObjectContext; } 
     } 

И это в самом конкретном контексте:

public override T UpdateGraph<T>(T entity, Expression<Func<IUpdateConfiguration<T>, object>> mapping = null) // where T : class, new() 
     { 
      return DbContextExtensions.UpdateGraph<T>(this, entity, mapping); 
     } 

и

private ObjectContext ObjectContext 
     { 
      get { return (this as IObjectContextAdapter).ObjectContext; } 
     } 
Смежные вопросы