0
这并不像它的一个人群来源的代码审查的一个问题...扩展的DbContext使用通用输入(...)
我注意到你可以使用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 ...
}
我最初从第一编码的变化评论,它似乎并不像交换到的普通版本一样简单条目。我将深入探讨这个问题,当我对问题有更好的了解时我会发布 – matto0 2011-05-15 22:30:25
在原始代码中,您无法直接为TEntity插入itemToModify。在非泛型Entry()中,TEntity要求它是一个类,并且itemToModify可以是任何类型(引用或不是)。通过添加类限制的行:'context.Entry(itemToModify).State'现在工作。我的原始代码通过获取类类型的itemToModify来解决问题,并将对象转换回该类型。虽然它工作,但它是混乱,并正在做额外的工作。谢谢你的帮助。 – matto0 2011-05-15 23:02:29