这不是一个问题,而是一个群众来源的代码审查......
我注意到你可以使用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 ...
}
答案 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;