Обязательный атрибут в классе Buddy не работает с Entity Framework 5 и ASP.NET

99
5

В моей базе данных есть поле, которое не является нулевым, но может содержать пустую строку. Когда я пытаюсь сохранить запись, используя connection.SaveChanges(), я получаю исключение: "Поле MyField требуется".


Я создал BuddyClass следующим образом, но я все еще получаю сообщение:


namespace MyNamespace {
[MetadataType(typeof(QuesT_Metadata))] public partial class QuesT { }
public class QuesT_Metadata {
[Required(AllowEmptyStrings = true)
public string MyField { get; set; }
}
}

Я могу использовать атрибут ErrorMessage, чтобы изменить сообщение в ошибке, которая была выбрана, поэтому я знаю, что класс Buddy работает правильно, но, видимо, атрибут Required отсутствует.


Я также попытался включить атрибут DisplayFormat (ConvertEmptyStringToNull = false), но получил тот же результат.


Я сделал это раньше, а также первая ссылка ниже, кажется, говорит, что она должна работать, поэтому я в тупике. Может ли кто-нибудь помочь?


Ссылки (только первые два кажутся непосредственно релевантными, но другие могут по-прежнему быть полезными):


http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.requiredattribute.allowemptystrings.aspx

 http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.displayformatattribute.convertemptystringtonull.aspx

 Как создать свойство Entity Framework NOT NULL, но не требуется при отправке формы

 Атрибуты аннотации данных, не работающие с использованием метаданных класса друзей в приложении MVC

 Проверка данных с помощью настраиваемых атрибутов (AttributeTargets.Class) в классах дружбы EF

спросил(а) 2021-01-19T16:51:18+03:00 6 месяцев, 2 недели назад
1
Решение
64

Я нахожусь в одной лодке здесь... У меня есть несколько примеров вашего точного поведения, которые работают нормально...


и теперь одно конкретное поле не будет вести себя...


Но, если я оставил атрибут "Обязательный (AllowEmptyStrings = true)", все вернется к работе просто отлично. Который, я думаю, это то, что я действительно ищу, поскольку рассматриваемый атрибут не имеет особого смысла (обязательно, но позволяет пользователю не отвечать).....

Для меня больше вопрос, почему он иногда работает, а иногда нет?


Но при мимине, удаление кода, подобного коду, должно решить проблему для вас.

ответил(а) 2021-01-19T16:51:18+03:00 6 месяцев, 2 недели назад
45

Я работал над этим, улавливая ошибку:


public static class ExtensionMethods {
public static void SaveChangesWithEmptyStrings(this DbContext context) {
try {
context.SaveChanges();
}
catch (DbEntityValidationException ex) {
foreach (DbEntityValidationResult result in ex.EntityValidationErrors)
foreach (DbValidationError error in result.ValidationErrors) {
Type t = result.Entry.Entity.GetType();
PropertyInfo pi = t.GetProperty(error.PropertyName);
pi.SetValue(result.Entry.Entity, "");
}
context.SaveChanges(); // Try again
}
}

}

ответил(а) 2021-01-19T16:51:18+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема