实体框架的通用任意/附加/添加功能

时间:2013-11-07 09:19:13

标签: c# iphone generics

通过我的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);
}

反复出现同样的事情,显然很难被通用函数处理。

但是,我不确定你如何处理它需要处理各种意外的实体类型。让我开始的一个很好的例子将是非常感激的。

1 个答案:

答案 0 :(得分:0)

我有类似的问题。这是我的一些旧代码(我现在使用的是基类而不是动态代码),但这应该可以帮到你。它仅用于更新,但应该有希望显示出一般的想法。

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,则将检索所有行,因此,请勿执行此操作。 。:)