我有一个我在Autofac容器中注册的EF DbContext:
builder.RegisterType<Data.Foobar>().As<IFoobarContext>().InstancePerDependency();
此对象用于我在Autofac容器中注册的其他对象:
builder.RegisterType<InteractionManager>().As<IInteractionManager>().SingleInstance();
现在我在更新数据库后偶尔会出现错误:
异常:System.Data.SqlClient.SqlException消息:INSERT 语句与FOREIGN KEY约束冲突 “FK_ParticipantCode_Participant”。冲突发生在数据库中 “数据库”,表 “dbo.Participant”,列'Id'。声明已经终止。
重置IIS后,此错误消失,同样的操作将在没有任何异常的情况下运行。我确信FK是正确的。
经过一些研究后,看起来dbcontext可能处于不一致状态。我在Data.Foobar注册中添加了以下内容:
builder.RegisterType<Data.Foobar>().As<IFoobarContext>().OnActivating(x =>
{
x.Instance.Dispose();
x.ReplaceInstance(new Data.Foobar());
})
.InstancePerDependency();
这也不起作用。
这是一个非常奇怪的问题,没有太多的事情继续下去所以这就是为什么我问你们所有人。可能是因为我的InteractionManager是单个实例,我的dbcontext也是,并且数据库状态没有正确更新?