0

我認爲以下任務似乎很容易編寫,但我花了很多時間,還沒有找到解決問題的正確方法。這裏是場景修改一對多關係 - 代碼優先

我有三個實體城市,地點和捐助者。市有很多地方,每個地方都有兩個與捐助者的一對多關係,如下所示。

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; } 
} 

在我的Donor編輯模塊中,我收到了(Donor Id,residenceLocalityId和officeLocalityId)。施主實體處於從表示層來的分離狀態。此代碼不起作用。舊的關係保持不變。

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

一件事我試着在改變ResidenceLocality的狀態和OfficeLocality來修改,但是這也不能工作。舊關係保持不變。在這種情況下,由於我將「地點」更改爲「修改地點」,因此我必須額外加載「城市」以避免修改地點的「更新異常」。

如果有人能讓我知道如何修改從表示層接收到的處於分離狀態的實體的一對多關係(如上所述)。

回答

0

您可以在模型中同時保留導航屬性和外鍵。

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(); 
} 
+0

是的,好像改變模式將事情簡單化。感謝您的解決方案。 – Jatin