我使用数据库第一种方法使用实体框架,但我没有使用EDMX方法,而是我定义了我的POCO类,在DBContext中我将初始化器设置为NULL。因此它不应该尝试在数据库中创建对象。一切都按预期工作得很好。
在我的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可能包含数据长度超过POCO类中定义的StringLength的字段的数据。
我想在发送数据库插入之前验证数据并从那里获取失败。
我想检查并希望将数据修剪为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 :(得分:0)
我可能会编写自定义反序列化代码,以便将XML中的数据截断为模型注释中指定的任何大小。这可能是更多的工作,但在我看来更清洁而不是验证。只是一个想法。