DbContext覆盖SaveChanges未触发

时间:2016-05-31 14:41:46

标签: c# entity-framework dbcontext

我正在尝试使用Entity Framework覆盖SaveChanges DbContect。

  

覆盖int SaveChanges()

没有运行且断点没有被击中。

我已将该类移至EDMX文件所在的根目录但仍然没有帮助。

如何让 SaveChanges覆盖起作用?

using System;
using System.Data.Entity;

namespace DAL
{
    public class MyEntities : DbContext
    {
        public override int SaveChanges()
        {
            throw new Exception("override DbContext>SaveChanges working");
            // return base.SaveChanges();
        }
    }
}

调用SaveChanges的代码

using (var ctx = new Entities())
            {
                // model.clientID = data.clientID;
                // model.clientGUID = data.clientGUID;
                model.clientName = data.clientName;
                model.clientDept = data.clientDept;
                model.clientWebsite = data.clientWebsite;
                model.clientEmail = data.clientEmail;
                model.isActive = data.isActive;
                model.clientModDate = data.clientModDate;
                model.clientCreatedDate = data.clientCreatedDate;

                ctx.Clients.Add(model);
                ctx.SaveChanges();
            }

File/Solution code

2 个答案:

答案 0 :(得分:0)

最简单的方法:EF类定义为" partial"。因此,添加另一个类名为:

的类文件
public partial class MyEntities
{
   public void SavingChanges()
   {
      //Do custom code

      this.SaveChanges();
   }
}

并将所有SaveChanges()次来电更改为SavingChanges()。然后,您可以根据需要自定义流程。关键是添加另一个部分类,以确保EF上下文具有部分定义(不在您的代码示例中,但是默认实现)。

答案 1 :(得分:0)

我能够使用提供的评论让代码正常工作。

  1. 在EDMX所在的同一项目中创建类文件
  2. 公共部分类实体< ---与项目实体相同的名称
  3. 现在都在工作!

    https://exceptionnotfound.net/entity-change-tracking-using-dbcontext-in-entity-framework-6/

    <table style="border: 1px solid">
        <thead style="border: 1px solid">
            <th>
                Value 1
            </th>
            <th>
                Value 2
            </th>
            <th>
                Sum
            </th>
        </thead>
        <tr>
            <td id="r1c1">
                <input style="width:50px" />
            </td>
            <td id="r1c2">
                <input style="width:50px" />
            </td>
            <td id="r1c3">
                <span id="r1Sum">0</span>
            </td>
        </tr>
        <tr>
            <td id="r2c1">
                <input style="width:50px"/>
            </td>
            <td id="r2c2">
                <input style="width:50px"/>
            </td>
            <td id="r2c3">
                <span id="r2Sum">0</span>
            </td>
        </tr>
    </table>
        Value 1 column total: <span id="val1ColTotal">0</span>
        &nbsp;
        Value 2 column total: <span id="val2ColTotal">0</span>
        &nbsp;
        Sum column total: <span id="sumColTotal">0</span>