EF 6 DB-First系列--在Entity Framework中验证实体

文章介绍了如何在EntityFramework中重写DbContext的ValidateEntity方法以实现自定义实体验证,如检查Student实体的StudentName是否为空。如果验证失败,会在SaveChanges时抛出DbEntityValidationException。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Entity Framework中验证实体

您可以为任何实体编写自定义服务器端验证。要做到这一点,重写DbContext的ValidateEntity方法,如下所示。

protected override System.Data.Entity.Validation.DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, System.Collections.Generic.IDictionary<object, object> items)
{
    if (entityEntry.Entity is Student)
    {
        if (entityEntry.CurrentValues.GetValue<string>("StudentName") == "")
        {
            var list = new List<System.Data.Entity.Validation.DbValidationError>();
            list.Add(new System.Data.Entity.Validation.DbValidationError("StudentName", "StudentName is required"));

            return new System.Data.Entity.Validation.DbEntityValidationResult(entityEntry, list);
        }
    }
    return base.ValidateEntity(entityEntry, items);
}

正如您在上面的代码中看到的,我们正在验证Student实体。如果StudentName为空,那么我们将DBValidationError添加到DBEntityValidationResult中。无论何时你调用DbContext.SaveChanges方法并尝试保存没有StudentName的Student实体,然后它将抛出一个DbEntityValidationException。考虑下面的例子。

try
{
    using (var ctx = new SchoolDBEntities())
    {
        ctx.Students.Add(new Student() { StudentName = "" });
        ctx.Standards.Add(new Standard() { StandardName = "" });

        ctx.SaveChanges();
    }
}
catch (DbEntityValidationException dbEx)
{
    foreach (DbEntityValidationResult entityErr in dbEx.EntityValidationErrors)
    {
        foreach (DbValidationError error in entityErr.ValidationErrors)
        {
            Console.WriteLine("Error Property Name {0} : Error Message: {1}",
                                error.PropertyName, error.ErrorMessage);
        }
    }
}

参考

https://www.entityframeworktutorial.net/
https://msdn.microsoft.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值