如果您需要房產具有主PropertyImage只能是適用於該財產的圖像,強調需要進行切換:
不能設置主形象的一個屬性,直到圖像被輸入並與物業相關以開始。
除非屬性存在關聯,否則不能添加圖像。
所以,你需要有PrimaryImage屬性爲空,直到後來設置。
雖然PropertyImage依賴於屬性,但屬性不依賴於PropertyImage,因此不應該是其記錄中的外鍵。
這意味着PrimaryImage的標誌(布爾值)需要與PropertyImage一起存儲,以指示哪個圖像是主圖像。
從屬性中刪除PrimaryImageId並將屬性放置在PropertyImage(IsPrimaryImage)上以允許選擇主屬性。
您可以通過UI處理唯一選擇,也可以使用表格上的唯一約束更好地處理唯一選擇。
public class Property
{
public int ID { get; set; }
public string Name { get; set; }
public ICollection<PropertyImage> Images { get; set; }
}
public class PropertyImage
{
[Key]
public Guid ID { get; set; }
public int PropertyID { get; set; }
public bool IsPrimaryImage { get;set; }
public virtual Property Property { get; set; }
}
這是不好的做法,試圖構建你想調用代碼的方法的數據及其周圍道路的關係。
您仍然可以以您想要的方式調用該方法,並封裝您可能需要的任何邏輯。
沿線想想,如果有一個級聯刪除適用這裏刪除不再有父項目與項目的關係:
如果您刪除屬性,所有相關PropertyImages也會被刪除 - 正確因爲他們依靠現有的記錄。
如果您刪除主PropertyImage,那麼物業將不得不被刪除,因爲記錄它涉及到不再存在......
所以有你的方法調用你會喜歡的方式,做同樣的事情爲此:
private void UpdatePrimaryImage(PropertyImage oldImage, PropertyImage newImage)
{
// Pass in the original primary PropertyImage and the new one obtained from the UI.
// Check that we do not have the same image, otherwise no change needs to be made:
if(oldImage.IsPrimary != newImage.IsPrimary)
{
oldImage.IsPrimary = false;
newImage.IsPrimary = true;
Update(oldImage);
Update(newImage);
SaveChanges;
}
}
,並檢索當前的主圖像:
Property.PropertyImages.Where(p => p.IsPrimaryImage).Url
你想創建Flunt API的關係? –
你將如何保證主圖像位於'Property'的圖像集合中? –