0
ユニットテスト(NUnitを使用)があり、Entity Framework 6で追加操作を模擬しようとしています。追加操作では、エンティティを再ロードして、新しく作成されたIDが返されるようにします。私が実行している問題は、エンティティをリロードするときに、「データベースが作成された後にコンテキストをサポートするモデルが変更されました」というエラーが表示されることです。私が確認したすべてのGoogleの回答には、模擬シナリオに適用した場合の解決策はありません。Moq、NUnit、およびEntity Frameworkを使用して保存されたエンティティをリロードする
[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'の間に設定されるべきです。あなたはそれを嘲笑したいかもしれませんが、私はそれが役に立たないと思います。あなたがテストしているのは、モックフレームワークが動作するかどうかだけです。 (私はDBの相互作用を嘲笑には信じていない)。 –