在实体框架中删除

时间:2011-09-19 15:15:44

标签: c# winforms entity-framework

我使用此代码删除实体框架中的记录(几条记录)

var tag = from t in objLib.TagsField where t.Book_ID_FK == id select t;
            foreach (var t in tag)
            {
                objLib.TagsField.Context.DeleteObject(t);
                objLib.SaveChanges();
            }

如何删除它而不使用每个代码(它需要时间!!)

3 个答案:

答案 0 :(得分:1)

您之后只需调用SaveChanges:

var tag = from t in objLib.TagsField where t.Book_ID_FK == id select t;
        foreach (var t in tag)
        {
            objLib.TagsField.Context.DeleteObject(t);
        }
 objLib.SaveChanges();

答案 1 :(得分:0)

使用LINQ删除会将您要删除的所有行都带入内存。如果它们不在内存中,则发出SQL语句以从数据库中删除行会更快。

除此之外,我会尝试戴维斯的答案,因为EF可以将更新结合在一起......我想这也可以提高性能。

答案 2 :(得分:0)

我用它来实现同样的目的......我正在使用Entity Framework 5.我知道现在可以使用Using()块并且是推荐的 - 但这里是基本的命令,对我来说只是添加一些替代方案:

/// <summary>
/// Method that will remove a favorite from the tblfavorite table.
/// </summary>
/// <param name="favoriteID"></param>
/// <returns></returns>
public Boolean DeleteFavoriteByFavoriteID(Int32 favoriteID)
{
    //Assume not found.
    IsFound = false;

    //Query the DB.
    var MatchedRec = (from f in dbContext.tblfavorites
                      where f.FavoriteID == favoriteID
                      select f).FirstOrDefault();

    //See if anything was found.
    if (MatchedRec != null)
    {
        IsFound = true;

        dbContext.tblfavorites.Remove(MatchedRec);
        dbContext.SaveChanges();
        return true;
    }

    //Default.
    return false;
}