Ошибки Entity Framework Validation неправильно обрабатываются клиентом breeze.sharp

Эта проблема находится в выпуске 0.5.4 Breeze.Sharp. Не уверен, должно ли это быть исправлено в Breeze.Sharp или, возможно, Breeze.ContextProvider.EF6, но, похоже, существует разрыв между ожидаемым поведением.

Неожиданное поведение:

У меня есть.Net Web API BreezeController, который содержит хранилище EF6.

Если я выполняю проверку на уровне объекта с помощью переопределения BeforeSaveEntities, где руководство должно не пройти проверку путем генерирования исключения EntityErrorsException, клиент Breeze.Sharp ловит это, как ожидается, и все в порядке.

Однако, если я выполняю проверку на уровне атрибутов с использованием класса Entity Framework ValidationAttribute, а не EntityErrorsException, ошибки возвращаются клиенту Breeze.Sharp в виде SaveResult, содержащего коллекцию Errors. В этом случае клиент создает исключение: невозможно привести объект типа 'Newtonsoft.Json.Linq.JValue' к типу 'Newtonsoft.Json.Linq.JArray'. Это исключение возникает, когда Breeze.Sharp пытается проанализировать массив KeyMappings SaveResult, который является нулевым.

Временное решение:

На данный момент, вместо того, чтобы изменять все мои атрибуты валидации для генерирования исключения EntityErrorsException, я решил эту проблему в методе SaveChanges моего BreezeController, проверив возвращаемые SaveResults на наличие ошибок и, если он найден, обернул эти ошибки в исключение, которое я затем выбрасывал клиенту.:

[HttpPost]
public SaveResult SaveChanges(JObject saveBundle)
{
    var saveResult = _unitOfWork.Commit(saveBundle);
    if (saveResult.Errors != null && saveResult.Errors.Count > 0)
    {
        var errors = new List<EntityError>();
        foreach (var error in saveResult.Errors)
        {
            var entityError = error as EntityError; //errors are stored as List<object> in the SaveResult
            if (string.IsNullOrEmpty(entityError.ErrorMessage))
            {
                entityError.ErrorName = "Attribute Validation Error";
            }
            errors.Add(entityError);
        }
        throw new EntityErrorsException(errors);
    }
    return saveResult;
}

1 ответ

Я постараюсь повторить это и исправить это до следующего выпуска.

Другие вопросы по тегам