質問

次のタスクはコーディングが簡単に思えると思いましたが、私は多くの時間を費やしており、それを解決するための正しい方法をまだ理解していませんでした。これがシナリオです

私には3つのエンティティシティ、地域、ドナーがいます。市には多くの地域があり、それぞれの地域には、以下に示すように、ドナーとの2つから多くの関係があります。

public class City {
    public virtual List<Locality> Localities { get; set; }
}

public class Locality {
    public virtual List<Donor> DonorsInOfficeLocality { get; set; }
    public virtual List<Donor> DonorsInResidenceLocality { get; set; }
}

public class Donor : User {
    public virtual Locality OfficeLocality {get;set;}
    public virtual Locality ResidenceLocality { get; set; }
}

私のドナー編集モジュールでは、私が受け取っています(ドナーID、レジデンセンセロカリリティID、オフィスエロカリリティID)。ドナーエンティティは、プレゼンテーションレイヤーからコミットしている戸建ての状態にあります。このコードは機能しません。古い関係はそのままです。

public void EditDonor(Donor donor, int residenceLocalityId, int officeLocalityId) {
    Locality residenceLocality = context.Localities.Find(residenceLocalityId);
    donor.ResidenceLocality = residenceLocality;
    Locality officeLocality = context.Localities.Find(officeLocalityId);
    donor.OfficeLocality = officeLocality;
    context.Donors.Attach(donor);
    context.Entry(donor).State = EntityState.Modified;
    context.SaveChanges();
}

私が試したもう一つのことは、レジデンセンセロサリティとオフィスエロカリリティの状態を変更したものに変更することですが、それもうまくいきませんでした。古い関係はそのままでした。また、この場合、私は変更された地域を変更するため、変更されたローカリティの更新例を避けるために、さらに都市を追加する必要があります。

誰かが私に、プレゼンテーション層から受け取った分離された状態のエンティティの多くの関係(上記のように)を変更する方法を教えてくれる場合。

役に立ちましたか?

解決

ナビゲーションプロパティと外部キーの両方をモデルに保持できます。

public class Locality {
     public int Id{get;set;}
    public virtual List<Donor> DonorsInOfficeLocality { get; set; }
    public virtual List<Donor> DonorsInResidenceLocality { get; set; }
}


public class Donor : User {
    public virtual Locality OfficeLocality {get;set;}
    public int OfficeLocalityId{get;set;}

    public virtual Locality ResidenceLocality { get; set; }
    public int ResidenceLocalityId{get;set;}
}

ナビゲーションプロパティを更新するためにIDで見つける必要のない外部キープロパティがある場合、

public void EditDonor(Donor donor, int residenceLocalityId, int officeLocalityId) {
     donner.OfficeLocalityId=officeLocalityId;
     donor.ResidenceLocalityId=residenceLocalityId;
    context.Donors.Attach(donor);
    context.Entry(donor).State = EntityState.Modified;
    context.SaveChanges();
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top