문제

나는 다음과 같은 클래스:

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 테이블과 노력하고 조정하는 데이터는 현재 다음과 같다:

enter image description here

하지만 내가 필요한 응용 프로그램 54135414ApplicationSupersessionId5415 그것은 그것이 어떻게 생겼는지 우리는 기존 시스템,따라서 왜 내가 추가되는 2 Legacy

그래서 나가려고 다음과 같다:

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

하지만 나는 다음과 같은 오류가 발생 라인에서 CatalogueContext.Entry(application).State = EntityState.Modified;:

enter image description here

도움이 되었습니까?

해결책

관리 문제를 해결합니다.나의 관계를 설정이 잘못된 내 구성이 있습니다.

나이:

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