我有一个单元测试(使用NUnit),并且试图在Entity Framework 6中模拟一个add操作。在add操作中,我添加了一个新的person实体并重新加载它,以便可以返回新创建的id。我遇到的问题是当我想重新加载实体时,出现错误“自创建数据库以来,支持上下文的模型已更改”。当我将其应用于模拟场景时,我在Google上检查过的所有答案都没有任何解决方案。
[Test]
[Description("Add")]
public void Add()
{
var person = new Person
{
FirstName = "John",
LastName = "Doe",
Dob = new DateTime(1984, 8, 23),
Ssn = "555-55-5555"
};
var mockDbSet = new Mock<DbSet<Person>>();
mockDbSet.Setup(s => s.Create()).Returns(new Person());
var mockContext = new Mock<PersonContext>();
mockContext.Setup(c => c.People).Returns(mockDbSet.Object);
context.Object.People.Add(person);
context.Object.SaveChanges();
// This code will throw an error.
//context.Object.Entry(person).Reload();
mockDbSet.Verify(m => m.Add(It.IsAny<Person>()), Times.Once());
mockContext.Verify(m => m.SaveChanges(), Times.Once());
// To do: Test that the id was populated from the reload operation.
}
我该怎么做才能重新加载实体并获取新的ID?
我发现我使用的是EF 5中的旧代码。我更新了此答案,以同时包含这两种方法。
// This is how to return a newly inserted id from EF 6.
public int AddMyEntity(MyEntity myEntity)
{
dbContext.MyEntities.Add(myEntity);
context.SaveChanges();
return myEntity.Id;
}
// This is how to return a newly inserted id from EF 5.
public int AddMyEntity(MyEntity myEntity)
{
dbContext.MyEntities.Add(myEntity);
dbContext.SaveChanges();
dbContext.Entry(myEntity).Reload();
return myEntity.Id;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句