c# - Entity Framework : A referential integrity constraint violation on many to many relationship

标签 c# entity-framework

嘿,我有一个带有大量进程内缓存和 Entity Framework 的应用程序。当我想对实体进行更新时,我会重新附加缓存的副本。我跟踪在上下文的生命周期中附加的所有内容,因此我不会尝试附加它们两次。

我在附加时发生了一个错误(在大多数情况下很少见,这工作正常并且非常快),它说了以下内容:

A referential integrity constraint violation occurred: The property values that define the referential constraints are not consistent between principal and dependent objects in the relationship.

我仔细观察了这个看起来很正常的实体。我认为这个问题是由于修复运行时外键的附加/分离造成的。

有没有一种好的方法可以获取有关此错误的更多信息,或者它是否会因实体处于 EF 未预料到的状态之外的其他原因而发生?

编辑: 数据库图(请注意,我使用的是 codefirst,我只是使用 EDMX 工具来制作图表,为了简单起见,我还从模型中删除了一堆常规属性)

enter image description here

最佳答案

除了多对多关系之外,PersonLocation 之间的一对多关系可能会发生错误,您显然在模型中拥有该关系。例如下面的代码会抛出异常:

using (var context = new MyContext())
{
    var person = new Person
    {
        CurrentLocationId = 1,
        CurrentLocation = new Location { Id = 2 }
    };
    context.People.Attach(person); // Exception
}

“定义引用约束的属性值”是外键属性值 CurrentLocationId 和主键值 CurrentLocation.Id。如果这些值不同,则抛出异常。 (尽管允许 CurrentLocationnull。)

在我看来,只能为外键关联抛出此异常,因为只有对于这种类型的关联,您才具有在模型中定义引用约束的属性。不能为独立协会抛出。由于每个多对多关系都是一个独立的关联(模型中没有外键属性),我的猜测是错误与您的多对多关系无关,而是与一对多关系有关。

关于c# - Entity Framework : A referential integrity constraint violation on many to many relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10001189/

相关文章:

c# - 如何让一个 Entity Framework 类继承一个基类

entity-framework - 如何从 Entity Framework 中删除约束?

c# - Couchbase Lite 2.0.0 C# 不区分大小写的查询

c# - LINQ 中的分组问题

c# - Entity Framework : What is use/Meaning of (? ) 问号

javascript - ViewData编译错误: BC30203: Identifier expected

c# - 如何捕捉 CancellationToken.ThrowIfCancellationRequested

c# - Entity Framework 无法保存我的更改

c# - EF Code First 通用检查是否存在没有公共(public) ID 属性的对象?

c# - 外键与独立关系 - Entity Framework 5 有改进吗?