Asp.net mvc 3 ASP.Net MVC 3实体框架4.1覆盖保存更改
我正在用EntityFramework4.1构建一个ASP.NETMVC3Web应用程序。我使用的是数据库优先的方法 我还使用了ADO.NET DbContext生成器来创建POCO类,而不是使用自动生成的实体对象。使用ADO.NET DbContext生成器时,它将创建两个新项,一个是为每个实体生成POCO类的.tt文件,另一个是生成派生DbContext类(用于查询和持久化数据)的.Context.tt文件 在我的应用程序中,我编写了对特定实体执行审计的代码,这些代码在我创建的override SaveChanges()方法中执行。 我将这个覆盖SaveChanges()方法放在Context.cs类中,如下所示,它工作得很好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
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类,它们将被视为一个类。只需确保它们位于同一名称空间中
永远不要在生成的文件中编写自己的代码
生成的类通常是局部的,只是为了以这种方式处理自定义代码