Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 ASP.Net MVC 3实体框架4.1覆盖保存更改_Asp.net Mvc 3_Entity Framework 4.1_Overriding_Edmx_Savechanges - Fatal编程技术网

Asp.net mvc 3 ASP.Net MVC 3实体框架4.1覆盖保存更改

Asp.net mvc 3 ASP.Net MVC 3实体框架4.1覆盖保存更改,asp.net-mvc-3,entity-framework-4.1,overriding,edmx,savechanges,Asp.net Mvc 3,Entity Framework 4.1,Overriding,Edmx,Savechanges,我正在用EntityFramework4.1构建一个ASP.NETMVC3Web应用程序。我使用的是数据库优先的方法 我还使用了ADO.NET DbContext生成器来创建POCO类,而不是使用自动生成的实体对象。使用ADO.NET DbContext生成器时,它将创建两个新项,一个是为每个实体生成POCO类的.tt文件,另一个是生成派生DbContext类(用于查询和持久化数据)的.Context.tt文件 在我的应用程序中,我编写了对特定实体执行审计的代码,这些代码在我创建的overrid

我正在用EntityFramework4.1构建一个ASP.NETMVC3Web应用程序。我使用的是数据库优先的方法

我还使用了ADO.NET DbContext生成器来创建POCO类,而不是使用自动生成的实体对象。使用ADO.NET DbContext生成器时,它将创建两个新项,一个是为每个实体生成POCO类的.tt文件,另一个是生成派生DbContext类(用于查询和持久化数据)的.Context.tt文件

在我的应用程序中,我编写了对特定实体执行审计的代码,这些代码在我创建的override SaveChanges()方法中执行。 我将这个覆盖SaveChanges()方法放在Context.cs类中,如下所示,它工作得很好

public partial class LocumEntities : DbContext
{
    public LocumEntities()
        : base("name=LocumEntities")
    {
    }

    public override int SaveChanges()
    {
        //Audit Code Executes in Here
        return base.SaveChanges();
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public DbSet<Audit> Audits { get; set; }
    public DbSet<Form> Forms { get; set; }
    //Other DbSets
}
public分部类语言:DbContext
{
公职人员()
:base(“name=LocumEntities”)
{
}
公共覆盖int SaveChanges()
{
//审计代码在这里执行
返回base.SaveChanges();
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
抛出新代码FirstException();
}
公共数据库集审核{get;set;}
公共数据库集表单{get;set;}
//其他数据库集
}
但是,每当我移动或更新我的EDMX图表中的实体,然后保存时,Context.cs类中的自定义SaveChanges()方法就会被删除。 有什么方法可以阻止这种情况发生,或者我应该把我的SaveChanges()方法放到别处

有人能给点建议吗


谢谢。

Context.cs不是一个类,它是一个文件,里面有一个(或零个,或多个)类

只需添加一个新的cs文件,例如
CustomContext.cs

public partial class LocumEntities : DbContext {

    public override int SaveChanges()
    {
        //Audit Code Executes in Here
        return base.SaveChanges();
    }

    //other custom code (not generated by T4)
}
由于它是局部的,如果您愿意,可以在许多.cs文件中包含部分Occomentities类,它们将被视为一个类。只需确保它们位于同一名称空间中

永远不要在生成的文件中编写自己的代码

生成的类通常是局部的,只是为了以这种方式处理自定义代码