gpt4 book ai didi

ef-code-first - 一次错误会破坏 Entity Framework 的后续使用

转载 作者:行者123 更新时间:2023-12-01 06:40:10 27 4
gpt4 key购买 nike

我们有 Entity Framework 的问题。例如,如果我们这样做:

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

然后我们尝试删除一个映射了依赖它的子实体的实体,我们得到一个错误是合乎逻辑的。 (当数据库中有依赖它的子项时,不能删除父项)。

之后,使用一个新的上下文实例,做一个'ParentEntity.ChildEntities.ToList()'还是有问题!

解决方法是重新启动应用程序池,问题就会消失。

我们正在使用 Autofac 并且上下文的生命周期设置(并确认)为每个 HttpRequest,因此错误在其他地方仍然存在。知道可以做些什么来避免这些错误吗?

我们的猜测是 objectcontext 在其他地方是持久的,它将子实体的状态存储为“EntityState.Deleted”,因此这与在后续调用中从数据库接收到的实际数据相冲突。

更新:似乎对堆栈的仔细检查表明存在一个懒惰的内部上下文:
[DbUpdateException: An error occurred while saving entities that do not expose foreign key properties for their relationships. The EntityEntries property will return null because a single entity cannot be identified as the source of the exception. Handling of exceptions while saving can be made easier by exposing foreign key properties in your entity types. See the InnerException for details.]
System.Data.Entity.Internal.InternalContext.SaveChanges() +200
System.Data.Entity.Internal.LazyInternalContext.SaveChanges() +33
System.Data.Entity.DbContext.SaveChanges() +20

也许如果我要以某种方式禁用 LazyInternalContext?这能做到吗?

最佳答案

如果您不想获得异常并出于某种原因让您自己将数据库保持在有效状态,您可以通过停止验证来做到这一点:

context.Configuration.ValidateOnSaveEnabled = false; // you can put this in the constructor of your context;
context.SaveChanges();

关于ef-code-first - 一次错误会破坏 Entity Framework 的后续使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11525082/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com