0

浏览我的 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);
}

一遍又一遍地重复同样的事情,显然很想用通用函数来处理。

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

4

1 回答 1

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();
        }
    }
}

另外,请记住,使用 anExpression允许数据库完成工作,如果您使用,Func则将检索所有行,所以,好吧,不要那样做...... :)

于 2014-01-21T17:34:27.413 回答