簡體   English   中英

防止外鍵屬性在EF Code First中被重置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM