我正在使用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类。
答案 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);
}
}
}