Es wurden widersprüchliche Änderungen an der Rolle x der Beziehung y festgestellt

Ich habe die Ausnahme

Es wurden widersprüchliche Änderungen an der Rolle x der Beziehung y festgestellt.

Jedes Mal, wenn ich mein Objekt meinem Kontext hinzufüge

Database.MyEntitys.Add(MyEntity);

Die Klasse MyEntity enthält diese Eigenschaft:

public virtual ICollection<DetailInfo> Group { get; set; }

Die DetailInfo-Klasse ist ziemlich einfach:

public class DetailInfo:BaseEntity {
    public virtual Detail Detail { get; set; }
    public decimal Total { get; set; }
    public virtual MyEntity MyEntity { get; set; }
}

Der DatabaseContext ist auch einfach:

public class MyEntityConfiguration : EntityTypeConfiguration<MyEntity> {
    public MyEntityConfiguration() {
        HasMany(e => e.Group).WithRequired(s => s.MyEntity).WillCascadeOnDelete(true);
    }
}

public class DetailInfoConfiguration : EntityTypeConfiguration<DetailInfo> {
    public DetailInfoConfiguration() {
        HasRequired(x => x.MyEntity).WithMany(s => s.Group);
        HasRequired(x => x.Detail);
        HasKey(s => s.ID);
        ToTable("DetailInfo");
    }
}

Auf der Datenbankseite hat die Tabelle MyEntity einen Primärschlüssel für die Spalten-ID. Die DetailInfo hat auch einen Primärschlüssel namens ID. DetailInfo enthält 2 FK, eine für MyEntity und eine für Detail, bei der es sich um eine andere Entität handelt.

In dem problematischen Szenario hat die neue MyEntity ein neues Detail. Ich erwarte einen neuen Eintrag für MyEntity mit einem neuen Detail und habe alle FK korrekt eingerichtet.

Bearbeiten:

Hier ist der Insert:

public virtual int Insert(MyEntity myEntity) {

    if (myEntity.Group != null && myEntity.Group.Count() == 0) {
        myEntity.Group = null; 
    }

    if (myEntity.Group != null) {
        foreach (var g in myEntity.Group)
        {
         if (g.PropertyOneToOne != null) {
                if (g.PropertyOneToOne.ID == 0) {
                    myEntity.PropertyOneToOne = null;
                }
                else {
                    if (!Database.PropertyOneToOnes.Local.Any(e => e.ID == g.PropertyOneToOne.ID)) {
                        Database.PropertyOneToOnes.Attach(g.PropertyOneToOne);
                    }
                    myEntity.PropertyOneToOne = Database.PropertyOneToOnes.Local.Single(e => e.ID == g.PropertyOneToOne.ID);
                }
            }
            else {
                myEntity.PropertyOneToOne = null;
            }
        }
    }
    Database.MyEntitys.Add(myEntity);
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage