簡體   English   中英

實體框架代碼優先-相同類型的2個實體

[英]Entity Framework Code First - 2 Entities of the Same Type

我試圖在實體中映射2個相同類型的屬性,並得到此錯誤:

An exception was thrown while executing a resolve operation. See the InnerException for details. ---> Introducing FOREIGN KEY constraint 'FK_dbo.Client_dbo.Messagebox_OutboxId' on table 'Client' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

無法創建約束。 請參閱先前的錯誤。 (有關詳細信息,請參見內部異常。)

我知道這個錯誤與我擁有2個相同類型的道具有關。

如何使用代碼優先+ EF Fluent API來完成?

方案:每個Client都有InboxOutbox ,它們都是Messagebox

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

public class Client : BaseEntity
{
    /// <summary>
    /// Gets or sets Client Alias
    /// </summary>
    public string Alias { get; set; }

    /// <summary>
    /// Gets or sets value indicating if the client was deleted
    /// </summary>
    public bool Deleted { get; set; }

    /// <summary>
    /// Gets or sets client's inbox
    /// </summary>
    public virtual Messagebox Inbox { get; set; }

    /// <summary>
    /// Gets or sets inbox Id
    /// </summary>
    public int InboxId { get; set; }

    /// <summary>
    /// Gets or sets client's outbox
    /// </summary>
    public virtual Messagebox Outbox { get; set; }

    /// <summary>
    /// Gets or sets outbox Id
    /// </summary>
    public int OutboxId { get; set; }
}

public class Messagebox : BaseEntity
{
    public int ClientId { get; set; }

    /// <summary>
    /// Gets or sets the messagebox client
    /// </summary>
    public virtual Client Client { get; set; }
}

此問題與使用兩個具有相同名稱的專家無關。 它與不願創建表之間循環的約束的sql數據庫有關。

您可以使用以下流暢的API來克服這一問題(請根據需要進行調整)

modelBuilder.Entity<Leaves>().HasRequired(l => l.Applicant)
                            .WithMany(bp => bp.LeavesToApply)
                            .HasForeignKey(l => l.ApplicantId)
                            .WillCascadeOnDelete(false);
modelBuilder.Entity<Leaves>().HasOptional(t => t.Approver)
                             .WithMany(bp => bp.LeavesToApprove)
                             .HasForeignKey(u => u.ApproverId)
                             .WillCascadeOnDelete(false);

問題是您必須轉向Cascade。 並手動刪除事物或刪除循環。

暫無
暫無

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

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