浏览我的EF类,它们充斥着如下所示的代码:
if (_myContext.[EntityType].Any(d => d.RowId == dc.RowId))
{
_myContext.[EntityType].Attach(dc);
_myContext.Entry(dc).State = EntityState.Modified;
}
else
{
_myContext.[EntityType].Add(dc);
}
一遍又一遍地是同一件事,并且显然渴望由通用函数处理。
但是,我不确定您将如何处理它处理各种意外实体类型的需求。一个让我开始的好例子将不胜感激。
我也有类似的问题。 这是我的一些旧代码(我现在使用基类而不是动态),但这应该让你开始。 它仅用于更新,但希望能显示总体思路。
public void GenericSetItemIsActive<T>(int id) where T : class
{
using (var db = new HotSpottingContext())
{
Expression<Func<T, bool>> whereFunction = m => m.As<dynamic>().ID == id;
var selectedItem = db.Set<T>().FirstOrDefault(whereFunction);
if (selectedItem != null)
{
dynamic dynamicItem = selectedItem;
dynamicItem.IsActive = !dynamicItem.IsActive;
db.Entry(dynamicItem).State = EntityState.Modified;
db.SaveChanges();
}
}
}
另外,请记住,使用Expression
允许数据库完成工作,如果您使用Func
,则将检索所有行,所以,好吧,不要这样做...... :)