3

我正在用Entity Framework 4.1構建一個ASP.Net MVC 3 Web應用程序。我正在使用數據庫優先方法。ASP.Net MVC 3實體框架4.1重寫SaveChanges

我也使用了ADO.NET DbContext生成器爲了創建POCO類而不是使用自動生成的實體對象。當您使用ADO.NET 發電機的DbContext它將創建兩個新項目,一個.TT文件生成每個實體的POCO類,也是 .Context.tt文件生成一個派生的DbContext類(用於查詢和保存數據)。

在我的應用程序中,我編寫了代碼來執行特定實體的審計,此代碼在重寫覆蓋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 
} 

但是,只要我即使在我EDMX圖移動或更新實體,然後保存,我的自定義SaveChanges()方法在Context.cs類中被刪除。 有沒有什麼辦法可以阻止這種情況發生,或者我應該在其他地方使用我的SaveChanges()方法?

有人能請指教嗎?

謝謝。

回答

5

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) 
} 

,因爲它是局部的,你可以有LocumEntities類的一部分,在很多的.cs文件,如果你想,他們會被視爲一類。只要確定他們在相同的命名空間。

不要寫你自己的代碼生成的文件...

生成的類一般是局部剛啓用的方式來處理自定義代碼。

+0

有道理。乾杯。 – tgriffiths