2010-06-08 156 views
2

我正在使用EF4和內置的自我跟蹤實體模板來從我的模型中生成我的實體。我還修改了T4模板,以便將所有對「ObjectContext」的引用更改爲「IObjectContext」,並將接口應用於自動生成的上下文(所有這些僅用於測試和模擬目的)。實體框架4,自我跟蹤實體T4模板,ApplyChanges()擴展方法

//my interface 
public interface IDatabaseEntities 
{ 
    IObjectSet<Customer> Customers {get;} 
    int SaveChanges(); 
} 

//self tracking entity auto gen code, with my mods 
public partial class DatabaseEntities : ObjectContenxt, IDatabaseEntities 
{ 
    //auto gen stuff here 
    public IObjectSet<Customer> Customers 
    //more auto gen stuff 
} 

在T4模板中,它們生成一個擴展方法ApplyChanges(),它只適用於類型爲「ObjectSet」的對象。所以我不能打電話給「_context.Customers.ApplyChanges(客戶)」;「因爲我正在處理「IObjectSet」類型。我真的需要調用這個方法來更新一個獨立實體!所以現在我無法弄清楚如何更新我的實體,因爲我沒有使用具體的ObjectSet類。

回答

0

如何擴展方法如下所示:

public static class EntityFrameworkExtensions 
{ 
    public static void ApplyChanges<TEntity>(this IObjectSet<TEntity> objectSet, TEntity entity) 
     where TEntity : class 
    { 
     if (objectSet is ObjectSet<TEntity>) 
     { 
      ((ObjectSet<TEntity>)objectSet).ApplyChanges(entity); 
     } 
    } 
}