[英]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)
屬性可消除該錯誤,但是我不確定我為什么會這樣。 無論是否打開級聯,錯誤都不會出現嗎? 以我理解問題的方式,該錯誤來自以下事實: VideoId
和MediaContentId
的生成是通過自動增量(或通過任何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.