我在作为单元测试运行的同事的集成测试中遇到间歇性问题。有时它可以在我的机器上工作,有时却不能,尽管当它停止工作时,似乎卡住了一段时间。我也没有弄清楚如何使它重新工作。
当我尝试对其进行调试时,该错误在第二个DBContext(ctx1)中-错误显示:
-
Message ='MyCollection'的'UpdatedOn'属性无法设置为'null'值。您必须将此属性设置为“ System.DateTime”类型的非空值。 Source = EntityFramework
-
collection.Local中只有一个项目-这是在先前上下文中添加的新项目。
-
collection.ResultsView-当我尝试枚举收集结果时,出现另一个错误: “已经有与此命令关联的打开的DataReader,必须先关闭它。”
MyDBContext最终基于EF6 DbContext。
public void CanAddItem()
{
using (var transaction = new TransactionScope(TransactionScopeOption.Required,new TimeSpan(0,15,0),TransactionScopeAsyncFlowOption.Enabled))
{
int initialCount;
// Arrange
using (IMyDBContext ctx = new MyDBContext(new AppConfigReader()))
{
var matched = ctx.MyCollection;
initialCount = matched.Count();
var item = new MyItem
{
UpdatedOn = DateTime.Now;
};
// act
ctx.MyCollection.Add(item);
ctx.SaveChanges();
}
//Assert
using (IMyDBContext ctx1 = new MyDBContext(new AppConfigReader()))
{
var collection = ctx1.MyCollection;
collection.Should().HaveCount(initialCount + 1);
}
}
我尝试将.ToList()
添加为var collection = ctx1.MyCollection.ToList()
,但这只是将错误移至该行代码中。
我认为他使用两个上下文的理由是证明该值始终写入数据库,并且不会卡在DbContext中。它总是在他的机器上运行。
我需要使其正常运行,以使其始终有效。任何帮助将不胜感激。