[英]Prevent foreign key property from being reset in EF Code First
在我的EF代碼優先模型中,我有兩個實體:
class User
{
[Key]
public int Id { get; set; }
[InverseProperty("Friend")]
public virtual ICollection<Invitation> Invitations { get; set; }
}
class Invitation
{
[Key]
public int Id { get; set; }
public int FriendId { get; set; }
[ForeignKey("FriendId")]
public User Friend { get; set; }
}
因此,FriendId屬性是User實體的外鍵。 現在,當我向User.Invitations集合添加新的Invitation對象時,相應地填充了Invitation.Friend屬性,這正是我想要的。
但是,當我從User.Invitations集合中刪除一個邀請對象時,我希望被刪除的邀請對象的Friend屬性保留其值。 當前,EF將其設置為null。 我該如何預防? 我正在使用EF 6.0。
謝謝
您的代碼優先模型將生成以下架構:
Users
-----
Id : int PK
Invitations
-----------
Id : int PK
FriendId : int FK NOT NULL
邀請和用戶之間的關系是使用“邀請”表上的FriendId在數據庫級別建模的。 由於使FriendId不可為空,因此這是必需的關系。 也就是說,數據庫中的邀請如果不與用戶相關聯就不能存在。
在您的實體模型中,從用戶中刪除邀請后,相應的邀請將從“邀請”表中刪除。 從邏輯上講,這是由於建立關系的方式而導致采取行動的唯一原因。
要將邀請保留在邀請表中(作為孤立實體),只需將引用的外鍵屬性標記為可空。
class Invitation
{
public int? FriendId { get; set; }
}
然后,在用戶實體上對.Remove
的調用將將該關系標記為已刪除,而不刪除實際的子實體。
您提到要出於審核目的保留“邀請用戶”關聯。 在這種情況下,也許邀請邀請函會是您的最佳選擇?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.