Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / .NET

EF Remove If Exists

5.00/5 (1 vote)
12 Apr 2014CPOL 15.5K  
Removing entity if it exists

Introduction

This small tip offers a solution to a "problem" that kind of annoyed me. The scenario is that you need to remove record(s) from the database, that might exist based on some predicate. You then use DbSet<T>.Remove(), but since DbSet<T>.Remove() can't handle a null parameter you can't do:

C#
context.EntitySet.Remove(context.EntitySet.SingleOrDefault(e => <some predicate>)); 

Instead you need to do something like:

C#
T entity = context.EntitySet.SingleOrDefault(e => <some predicate>);
if(entity != null)
{
    context.EntitySet.Remove(entity);
} 

The Code

To make the above a bit more straight forward, I wrote this simple extension method:

C#
static class DbSetExtensions
{
    public static void RemoveIfExists<T>(this DbSet<T> 
    theDbSet, Expression<Func<T, bool>> thePredicate) where T : class
    {
        foreach(T entity in theDbSet.Where(thePredicate))
        {
            theDbSet.Remove(entity);
        }
    }
} 

Using this extension method, the removal can be made like e.g.:

C#
context.EntitySet.RemoveIfExists(e => e.PropA == 1 && e.PropB > 2);

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)