簡體   English   中英

可與EF一對一級聯

[英]Cascadable one-to-one, required:required relationship with EF

我有一個通過1-1鏈接的Video類和MediaContent類,required:required:required關系:每個Video必須恰好具有1個關聯的MediaContent 刪除MediaContent對象必須導致關聯的Video對象的刪除。

使用流暢的API,可以對關系進行如下建模:

modelBuilder.Entity<Video.Video>()
            .HasRequired(v => v.MediaContent).WithRequiredPrincipal(mc => mc.Video)
            .WillCascadeOnDelete(true);

在添加遷移以反映數據庫中的此更改時,以下是根據外鍵轉錄關系的方式:

AddForeignKey("MediaContents", "MediaContentId", "Videos", "VideoId", cascadeDelete: true);

更新數據庫時,出現以下錯誤:

Cascading foreign key 'FK_MediaContents_Videos_MediaContentId' cannot be created where the referencing column 'MediaContents.MediaContentId' is an identity column.

刪除WillCascadeOnDelete(true)屬性可消除該錯誤,但是我不確定我為什么會這樣。 無論是否打開級聯,錯誤都不會出現嗎? 以我理解問題的方式,該錯誤來自以下事實: VideoIdMediaContentId的生成是通過自動增量(或通過任何id生成策略執行)來處理的,這可能與外鍵約束相矛盾。 但是我看不到這與刪除級聯有什么關系...

我想念什么? 更一般而言,您將如何與EF建立可級聯的一對一的required:required:required關系?

我避免使用modelBuilder替代方法,通常使用簡單的POCO和屬性-您可以使用它們來完成目標,如下所示:

public class Video
{
    public int Id { get; set; }

    // Adding this doesn't change the db/schema, but it is enforced in code if
    // you try to add a Video without a MediaContent.
    [Required]
    public MediaContent MediaContent { get; set; }
}

public class MediaContent
{
    [ForeignKey("Video")]
    public int Id { get; set; }

    public Video Video { get; set;}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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