实体框架4,自我跟踪实体T4模板,ApplyChanges()扩展方法

时间:2010-06-08 00:01:52

标签: entity-framework t4

我正在使用EF4和内置的自我跟踪实体模板来从我的模型中生成我的entites。我还修改了T4模板,以便将所有对“ObjectContext”的引用更改为“IObjectContext”,并将接口应用于自动生成的上下文(所有这些都用于测试和模拟)。

//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(customer);”因为我正在使用“IObjectSet”类型。我真的需要调用这个方法来更新一个分离的实体!所以现在我无法弄清楚如何更新我的实体,因为我没有使用具体的ObjectSet类。

1 个答案:

答案 0 :(得分: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);
        }
    }
}