Я использую Entity Framework с использованием первого подхода к базе данных, но я не использую подход EDMX, вместо этого у меня определены мои классы POCO, а в DBContext я устанавливаю инициализатор до NULL. Чтобы он не пытался создавать объекты в базе данных. Все работает очень хорошо, как ожидалось.C# EF Длина строки Проверка данных с атрибутом свойства POCO перед вставкой БД
В моем классе POCO у меня есть свойства, обернутые атрибутом StringLength, определенным для значения максимальной длины для этого свойства, как показано ниже.
public class Users
{
[Key, Column(Order = 0)]
[XmlIgnore]
public long ID { get; set; }
[XmlIgnore]
[Key, Column(Order = 1)]
public long? SrNo { get; set; }
[XmlIgnore]
public DateTime ScanDateTime { get; set; }
[StringLength(255)]
[XmlElement(ElementName = "username")]
public string UserName { get; set; }
[StringLength(75)]
[XmlElement(ElementName = "lastlogon")]
public string LastLogon { get; set; }
[StringLength(75)]
[XmlElement(ElementName = "lastlogoff")]
public string LastLogoff { get; set; }
[StringLength(1000)]
[XmlElement(ElementName = "accountinfo")]
public string AccountInfo { get; set; }
[XmlIgnore]
public DateTime DCDTime { get; set; }
[XmlIgnore]
public DateTime? LastModDTime { get; set; }
}
Я использую атрибут [XmlIgnore] для десериализации XML. Я заполняю данные в этот объект класса путем десериализации данных XML. Во многих случаях XML может иметь данные для полей, где длина данных может превышать StringLength, определенную в классе POCO.
Я хочу проверить данные перед отправкой вставки БД и получением отказа от нее.
Я хочу проверить и хочу обрезать данные до указанной длины, как определено в атрибуте StringLength. Например, после десериализации данных XML объекту Users, если имя пользователя превышает длину 75, я обрезаю его до 75, а затем передаю полный объект для вставки БД.
Я знаю пару способов сделать это, и я пытаюсь сделать это как показано ниже, создав метод расширения.
public static void ValidateData(this List<Users> Data)
{
int UserNamelength = typeof(Users).GetProperty("UserName ").GetCustomAttributes(typeof(StringLengthAttribute), false).Cast<StringLengthAttribute>().FirstOrDefault().MaximumLength;
foreach (var item in Data)
{
if (item.UserName.Length > UserNamelength)
{
//Trim the UserName field to the length i.e. 75 characters
}
}
}
Аналогично, я хочу, чтобы проверка была во всех полях для класса Users.
Я ищу любое другое простое и четкое решение.
Пожалуйста, помогите мне с тем же.
Спасибо за ваш ответ, но я ищу более конкретное решение. –