2016-07-19 4 views
3

Я использую 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.

Я ищу любое другое простое и четкое решение.

Пожалуйста, помогите мне с тем же.

ответ

0

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

+0

Спасибо за ваш ответ, но я ищу более конкретное решение. –

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