0
我有一個單元測試(使用NUnit),我試圖在實體框架6中模擬添加操作。在添加操作中,我添加一個新的人實體並重新加載它,以便可以返回新創建的ID。我遇到的問題是當我想重新加載實體時,我得到錯誤,「自創建數據庫以來支持上下文的模型已經發生了變化」。我在Google上查到的所有答案在應用於嘲笑場景時都沒有任何解決方案。使用Moq,NUnit和實體框架重新加載實體
[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?
您不必重新加載實體。它的Id值應該在'SaveChanges'中設置。你可能想嘲笑,但我認爲這是沒用的。你測試的唯一東西是模擬框架是否工作。 (我不相信嘲笑數據庫交互)。 –