2014-06-13 4 views
0

Я начал видеть следующую ошибку после внесения некоторых изменений кода в код моего JavaScript-клиента. Я видел, как другие сообщают об этом, но не видели никого, способного сузить условия.Breeze .NET Server code throws Исключение Int32Converter

Int32Converter cannot convert from System.Int64. 

После значительного перекопа в проблему это, похоже, является ошибкой в ​​коде сервера Breeze .NET. Часть трассировки стека исключений здесь показывает, где ошибка происходит из:

at Breeze.ContextProvider.EF6.EFContextProvider`1.ConvertValue(Object val, Type toType) in EFContextProvider.cs:line 603 
    at Breeze.ContextProvider.EF6.EFContextProvider`1.SetPropertyValue(Object entity, String propertyName, Object value) in EFContextProvider.cs:line 573 
    at Breeze.ContextProvider.EF6.EFContextProvider`1.<>c__DisplayClass10.<RestoreOriginal>b__f(KeyValuePair`2 kvp) in EFContextProvider.cs:line 468 
    at System.Collections.Generic.List`1.ForEach(Action`1 action) 
    at Breeze.ContextProvider.EF6.EFContextProvider`1.RestoreOriginal(EntityInfo entityInfo) in EFContextProvider.cs:line 466 
    at Breeze.ContextProvider.EF6.EFContextProvider`1.<ProcessAllDeleted>b__9(EFEntityInfo entityInfo) in EFContextProvider.cs:line 337 
    at System.Collections.Generic.List`1.ForEach(Action`1 action) 
    at Breeze.ContextProvider.EF6.EFContextProvider`1.ProcessAllDeleted(List`1 deletedEntities) in EFContextProvider.cs:line 334 
    at Breeze.ContextProvider.EF6.EFContextProvider`1.SaveChangesCore(SaveWorkState saveWorkState) in EFContextProvider.cs:line 219 
    at Breeze.ContextProvider.ContextProvider.OpenAndSave(SaveWorkState saveWorkState) 
    at Breeze.ContextProvider.ContextProvider.SaveChanges(JObject saveBundle, TransactionSettings transactionSettings) 

Что происходит, что EFContextProvider<>.ConvertValue() вызывается с long в качестве первого параметра и второго параметра в Type для int?. Оттуда извлеченный TypeConverter не может преобразовать его и выбрасывает вышеуказанное исключение.

Я был в состоянии воспроизвести ошибку, загрузив DocCode и писать следующий тест:

[TestMethod] 
    public async Task RemovingNavigationProperty() 
    { 
     var entityManager = await TestFns.NewEm(_northwindServiceName); 

     var employee = new Employee() 
     { 
      FirstName = "First", 
      LastName = "Employee" 
     }; 
     entityManager.AddEntity(employee); 


     var manager = new Employee() 
     { 
      FirstName = "First", 
      LastName = "Manager" 
     }; 
     entityManager.AddEntity(manager); 
     employee.Manager = manager; 

     try 
     { 
      var saveResult = await entityManager.SaveChanges(); 

      // Now reverse everything 
      manager.EntityAspect.Delete(); 
      employee.Manager = null; 

      employee.EntityAspect.Delete(); 

      saveResult = await entityManager.SaveChanges(); 

     } 
     catch (Exception e) 
     { 
      var message = string.Format("Save should have succeeded; Received {0}: {1}", 
             e.GetType().Name, e.Message); 
      Assert.Fail(message); 
     } 

    } 

ответ

0

Хороший улов. По состоянию на 6/16/2014, это было исправлено в breeze.server.net GitHub repo, а также будет частью следующего полномасштабного выпуска breezeJs, надеюсь, на этой неделе. Я отправлю сообщение здесь, когда он выйдет в новых пакетах nuget.

Смежные вопросы