Question

J'ai la classe suivante :

public class Application
{
    public int Id { get; set; }

    /* Other properties */

    public int LegacyId { get; set; }
    public int LegacyParentId { get; set; }

    public int? ApplicationSupersessionId { get; set; }
    public virtual ICollection<Application> ApplicationSupersessions { get; set; }

    public Application()
    {
        ApplicationSupersessions = new List<Application>();
    }
}

ApplicationSupersessions est une entité facultative auto-jointe.J'ai déjà des données ajoutées à mon Applications tableau et j'essaie d'ajuster les données, qui ressemblent actuellement à ceci :

enter image description here

Mais j'ai besoin d'applications 5413 et 5414 avoir un ApplicationSupersessionId de 5415 car c'est à cela que cela ressemble dans notre système Legacy, c'est pourquoi j'ai ajouté les 2 Legacy Colonnes

J'ai donc essayé ce qui suit :

var applications = CatalogueContext.Applications.ToList();

foreach (var application in applications)
{
    var legacyChildren = applications.Where(x => 
        x.LegacyParentId == application.LegacyId).ToList();

    if(legacyChildren.Any())
    {
        foreach(var child in legacyChildren)
        {
            application.ApplicationSupersessions.Add(child);
        }

       CatalogueContext.Entry(application).State = EntityState.Modified;
    }
}

CatalogueContext.SaveChanges();

Mais j'obtiens l'erreur suivante sur la ligne CatalogueContext.Entry(application).State = EntityState.Modified;:

enter image description here

Était-ce utile?

La solution

J'ai réussi à résoudre ce problème.J'ai mal configuré la relation dans ma configuration.

J'ai eu ça :

HasOptional(x => x.ApplicationSupersessions)
    .WithMany()
    .HasForeignKey(x => x.ApplicationSupersessionId)
    .WillCascadeOnDelete(false);

Quand ça aurait dû être ça :

HasMany(x => x.ApplicationSupersessions)
    .WithOptional()
    .HasForeignKey(x => x.ApplicationSupersessionId)
    .WillCascadeOnDelete(false);

Je ne sais pas quelle est la différence et s'il s'agit ou non d'un bug EF ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top