Autofac中DbContext上的DbUpdateException

时间:2014-11-11 14:45:58

标签: c# entity-framework autofac sqlexception

我有一个我在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也是,并且数据库状态没有正确更新?

0 个答案:

没有答案