首页 新闻 会员 周边 捐助

在 EF Core SaveChanges 之前验证实体属性值的长度

0
悬赏园豆:30 [已解决问题] 解决于 2019-12-12 13:09

实体定义如下

public class BlogPost
{
    [MaxLength(150)]
    public string Title { get; set; }
}

请问在 EF Core SaveChanges 保存到数据库之间如何验证 Title 是否超过 MaxLength 的限制,以避免下面的错误?

String or binary data would be truncated.
The statement has been terminated.
C#
dudu的主页 dudu | 高人七级 | 园豆:29568
提问于:2019-12-12 12:12
< >
分享
最佳答案
0

都忘了之前解决过这个问题(C#中手工进行声明式验证,从此远离if验证),实现代码如下:

static void Main(string[] args)
{
    var blogPost = new BlogPost();
    blogPost.Title = new string('*', 200);

    var validationContext = new ValidationContext(blogPost);
    var validationResults = new List<ValidationResult>();

    var succcess = Validator.TryValidateObject(blogPost, validationContext, validationResults, true);
    if (!succcess)
    {
        Console.WriteLine(string.Join("\n", validationResults.Select(r => r.ErrorMessage)));
    }
}
dudu | 高人七级 |园豆:29568 | 2019-12-12 13:08
其他回答(1)
0

可以重写 SaveChanges 方法,在 SaveChanges 之前用 ChangeTracker 做一些检查

foreach (var entry in ChangeTracker.Entries<CommunityOwner>())
{
    if (entry.State == EntityState.Added)
    {
        entry.Entity.UpdatedAt = DateTime.UtcNow;

        // 判断是否满足自动审核通过条件
        if (await IsCanAutoApprove(entry.Entity.UpdatedBy))
        {
            entry.Entity.State = MockingJ.Models.EntityState.Reviewed;
        }
    }
}
WeihanLi | 园豆:217 (菜鸟二级) | 2019-12-13 11:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册