エンティティフレームワーク:自己結合エラー
-
21-12-2019 - |
質問
次のクラスがあります。
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
テーブルに追加されていて、現在このように見えるデータを調整しようとしています。
しかし、私たちのレガシーシステムのようなものとして5413
の5414
を持つアプリケーションが必要です。
だから私は次のことを試しました:
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のバグかどうかはわかりませんか?
所属していません StackOverflow