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

1

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

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

У меня есть.Net Web API BreezeController, который содержит репозиторий EF6.

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

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

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

На данный момент вместо того, чтобы изменять все мои атрибуты проверки, чтобы исключить EntityErrorsException, я решил это в моем методе BreezeController SaveChanges, проверив возвращаемые 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;
}
Теги:
validation
entity-framework
breeze
breeze-sharp

1 ответ

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню