x.Savechanges()类:没有找到合适的方法来覆盖

时间:2018-08-27 01:07:40

标签: c# asp.net entity-framework error-handling

我想签出db.SaveChanges()进行错误处理,并将其放入EFentities类的SaveChanges()方法中,但是对于SaveChanges()我有此错误:

  

找不到合适的方法来覆盖

这是我的代码:

public partial class EFentities
{
    EF db = new EF();

    public override int  SaveChanges()
    {
        try
        {
            return base.SaveChanges();
        }
        catch (DbEntityValidationException ex)
        {
            // Retrieve the error messages as a list of strings.
            var errorMessages = ex.EntityValidationErrors
                    .SelectMany(x => x.ValidationErrors)
                    .Select(x => x.ErrorMessage);

            // Join the list to a single string.
            var fullErrorMessage = string.Join("; ", errorMessages);

            // Combine the original exception message with the new one.
            var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);

            // Throw a new DbEntityValidationException with the improved exception message.
            throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您将得到找不到合适的方法来覆盖错误,因为您既没有在部分类的另一端定义SaveChanges()虚拟方法,也没有定义任何虚拟的基类方法继承自。

System.Data.Entity.DbContext类中可用的具有SaveChanges()签名的virtual方法是这样的:

public virtual int SaveChanges()

因此,您应该添加DbContext作为EFEntities继承的基类,以使override关键字起作用:

using System.Data.Entity;

public partial class EFEntities : DbContext // add this base class
{
    public override int SaveChanges()
    {
        // manual override goes here

        return base.SaveChanges();
    }
}