Entity Framework "Unexpected Connection State" Exception

c# entity-framework signalr

Question

After three hours of debugging and searching, I'm hoping someone here has an answer. Entity Framework (using MySQL) throws the following exception if I call the following function quickly in succession (e.g. < 0.1 seconds apart).

System.InvalidOperationException: Unexpected connection state. When using a wrapping provider ensure that the StateChange event is implemented on the wrapped DbConnection.

However, sometimes the function works without any problems. The exception is thrown on the first ToList() call:

void InsertOrUpdateMaterials(List<Material> materials)
{
    var id = GetUserId();
    var materialIds = materials.Select(x => x.MaterialId).ToList();

    // Remove old materials from DB
    var oldMaterials = Db.Materials.Where(p => p.CreatedBy == id && 
            materialIds.Contains(p.MaterialId)).ToList(); // exception
    Db.Materials.RemoveRange(oldMaterials);
    Db.SaveChanges();

    // Replace previous materials with the new ones in list
    Db.Materials.AddRange(materials);
    Db.SaveChanges();
}

Oddly, this error never occurred on the development server, so I looked into possible configuration issues to no avail.

Sometimes, Entity Framework throws:

System.Data.Entity.Core.EntityCommandExecutionException: There is already an open DataReader associated with this Connection which must be closed first.

Again pointing to the ToList() call. Any ideas?

1
18
4/7/2016 5:12:43 PM

Popular Answer

For other people that might a similar problem. Based on the above comments it seems that the code uses a cached db-context. After the db-context was created the db-connection broke (no StateChangehandler was installed in the application). After the connection breakdown the application used the cached db-context to perform some operations on it.

Creating a new db-context solved the problem.

4
4/29/2016 7:26:12 AM


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow