扩展DbContext以使用通用条目(...)

时间:2011-05-15 18:21:23

标签: entity-framework entity-framework-4.1

这不是一个问题,而是一个群众来源的代码审查......

我注意到你可以使用context.Entry(itemToModify)来添加对象以及更新&用一个catch删除,必须指定itemToModify的类型,它不能是通用的。

如果我可以解决泛型类型问题,我可以消除和简化我的代码。

这就是我做的,它在本地工作,让我知道你的想法,如果你看到问题等。

public static class ExtensionMethods
{
    public static bool ModifyContext<T>(this DbContext context, T itemToModify, EntityState state) where T : class
    {
        // Function that throws a null arg exception 
        ValidationFunctions.IsNotNull(itemToModify);

        context.Entry(itemToModify).State = state;

        return context.SaveChanges() > 0;
    }
}

public class PersonRepository : IPersonRepository
{
    private readonly SomeContext _context = new SomeContext();

    /// <summary>
    /// Add a person
    /// </summary>
    public bool Add(Person personToAdd)
    {
        return _context.ModifyContext(personToAdd, EntityState.Added);
    }

    // Edit, Delete etc ...
}

1 个答案:

答案 0 :(得分:1)

我不明白你的代码。你为什么用这个:

 var type = itemToModify.GetType();
 var item = Convert.ChangeType(itemToModify, (Type)type);
 context.Entry(item).State = state;

当您有强类型实体时?

为什么不使用这个:

context.Entry(itemToModify).State = state;

context.Entry<T>(itemToModify).State = state;