第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

引入外鍵約束可能會導(dǎo)致循環(huán)或多個(gè)級聯(lián)路徑-為什么?

引入外鍵約束可能會導(dǎo)致循環(huán)或多個(gè)級聯(lián)路徑-為什么?

慕田峪9158850 2019-06-23 16:58:45
引入外鍵約束可能會導(dǎo)致循環(huán)或多個(gè)級聯(lián)路徑-為什么?我和這件事斗爭了一段時(shí)間了,我不太明白到底發(fā)生了什么事。我有一個(gè)卡片實(shí)體,其中包含側(cè)(通常2)-和卡片和兩邊都有一個(gè)舞臺。我使用的是EF CodeFirst遷移,但是這個(gè)錯誤導(dǎo)致遷移失敗:在表“側(cè)”上引入外鍵約束‘fk_dbo.ides_dbo.Cards_CardId’可能會導(dǎo)致循環(huán)或多個(gè)級聯(lián)路徑。指定“刪除不操作”或“更新不操作”,或修改其他外鍵約束。這是我的卡片實(shí)體:public class Card{     public Card()     {         Sides = new Collection<Side>();         Stage = Stage.ONE;     }     [Key]     [Required]     public virtual int CardId { get; set; }     [Required]     public virtual Stage Stage { get; set; }     [Required]     [ForeignKey("CardId")]     public virtual ICollection<Side> Sides { get; set; }}這是我的側(cè)實(shí)體:public class Side{     public Side()     {         Stage = Stage.ONE;     }     [Key]     [Required]          public virtual int SideId { get; set; }      [Required]     public virtual Stage Stage { get; set; }     [Required]     public int CardId { get; set; }     [ForeignKey("CardId")]     public virtual Card Card { get; set; }}這是我的舞臺實(shí)體:public class Stage{     // Zero     public static readonly Stage ONE = new Stage(new TimeSpan(0, 0, 0), "ONE");     // Ten seconds     public static readonly Stage TWO = new Stage(new TimeSpan(0, 0, 10), "TWO");     public static IEnumerable<Stage> Values     {         get         {             yield return ONE;             yield return TWO;         }     }     public int StageId { get; set; }     private readonly TimeSpan span;     public string Title { get; set; }     Stage(TimeSpan span, string title)     {         this.span = span;         this.Title = title;     }     public TimeSpan Span { get { return span; } }}奇怪的是,如果我在舞臺課上加上以下內(nèi)容:    public int? SideId { get; set; }     [ForeignKey("SideId")]     public virtual Side Side { get; set; }遷移成功運(yùn)行。如果我打開SSM,看看這些表,我可以看到Stage_StageId已添加到Cards(如預(yù)期/所需)Sides不包含引用Stage(未預(yù)期)。如果我再加上    [Required]     [ForeignKey("StageId")]     public virtual Stage Stage { get; set; }     public int StageId { get; set; }到我的旁聽課上,我明白了StageId列添加到我的Side桌子。這是可行的,但現(xiàn)在我的整個(gè)應(yīng)用程序中,任何引用Stage包含SideId在某些情況下是完全不相關(guān)的。我只想把我的Card和Side實(shí)體aStage屬性,如果可能的話,在不污染帶有引用屬性的Stage類的情況下,..我做錯什么了?
查看完整描述

3 回答

?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊

因?yàn)?/trans>Stage所需,所有一對多的關(guān)系Stage默認(rèn)情況下,將啟用級聯(lián)刪除。意思是,如果刪除Stage實(shí)體

  • 刪除將直接級聯(lián)到

    Side

  • 刪除將直接級聯(lián)到

    Card

    因?yàn)?/trans>

    Card

    Side

    在默認(rèn)情況下啟用級聯(lián)刪除所需的一對多關(guān)系,然后它將從

    Card

    Side

因此,您有兩個(gè)級聯(lián)刪除路徑。StageSide-這就導(dǎo)致了例外。

你必須要么Stage在至少一個(gè)實(shí)體中可選(即刪除[Required]屬性的Stage屬性)或使用FLUENT API禁用級聯(lián)刪除(數(shù)據(jù)注釋不可能):

modelBuilder.Entity<Card>()
    .HasRequired(c => c.Stage)
    .WithMany()
    .WillCascadeOnDelete(false);modelBuilder.Entity<Side>()
    .HasRequired(s => s.Stage)
    .WithMany()
    .WillCascadeOnDelete(false);


查看完整回答
反對 回復(fù) 2019-06-23
?
一只名叫tom的貓

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊

我有一張桌子,它和其他人有著循環(huán)的關(guān)系,而我也得到了同樣的錯誤。原來是關(guān)于不可空的外鍵的。如果鍵不可空,則相關(guān)對象必須刪除,循環(huán)關(guān)系不允許這樣做。所以使用可空外鍵。

[ForeignKey("StageId")]public virtual Stage Stage { get; set; }public int? StageId { get; set; }


查看完整回答
反對 回復(fù) 2019-06-23
?
牛魔王的故事

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊

想知道如何在EF核心中這樣做的人:

      protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
                {
                    relationship.DeleteBehavior = DeleteBehavior.Restrict;
                }
           ..... rest of the code.....


查看完整回答
反對 回復(fù) 2019-06-23
  • 3 回答
  • 0 關(guān)注
  • 634 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號