Skip to content

DBContext.Entry(newEntity).CurrentValues.SetValues(oldEntity) throws InvalidOperationException #6

Description

@fieldb

The following code runs in production but throws an InvalidOperationException in the unit test when DBSet (Materials) is a MockDBSet. Here is the setup for the mocks:

var items = new List<Material> {
  new Material { Id = 1, Pieces = 10 },
  new Material {Id = 2, Pieces = 10 }
};

var mockItems = new MockDBSet<Material>()
 .SetupSeedData(items)
 .SetupAddAndRemove()
 .SetupLinq();

var mockContext = new Mock<MyContext>();
mockContext.Setup(o=>o.Materials).Returns(mockItems.Object);

The mockContext is then passed to a service. Here is the code within the service that throws the exception:

var items = _context.Materials.ToList();
var newItem = new Material();
var oldItem = items.First();
_context.Materials.Add(newItem);           
_context.Entry(newItem).CurrentValues.SetValues(oldItem);

Here is the exception:

An exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll but was not handled in user code

Additional information: Member 'CurrentValues' cannot be called for the entity of type 'Material' because the entity does not exist in the context. To add an entity to the context call the Add or Attach method of DbSet.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions