質問

次のクラスがあります。

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はオプションの自己結合エンティティです。私は既に私のApplicationsテーブルに追加されていて、現在このように見えるデータを調整しようとしています。

画像の説明が入力されています

しかし、私たちのレガシーシステムのようなものとして54135414を持つアプリケーションが必要です。

だから私は次のことを試しました:

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();
.

しかし、Line ApplicationSupersessionId

に次のエラーが発生します。

画像の入力ここで

役に立ちましたか?

解決

私はこれを解決することができました。私は自分の構成で関係が間違っていることがありました。

私はこれを持っていました:

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

これがあったとき:

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

違いが何であるか、そしてそのEFのバグかどうかはわかりませんか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top