簡體   English   中英

EF6.1對流式api映射到可選

[英]EF6.1 optional-to-optional with fluent api mapping

我有以下實體:

public class Revision
{
    public int Id { get; set; }
    ...
    public int? PreviousRevisionId { get; set; }
    public virtual Revision PreviousRevision { get; set; }
}

我需要的是在同一實體內創建可選對可選關系,使用PreviousRevision作為導航屬性,並使用PreviousRevisionId作為其外鍵ID。 我知道可以通過使用[ForeignKey("PreviousRevision")]屬性注釋PreviousRevisionId屬性來實現,但是流暢的api呢?

我試過了:

HasOptional(c => c.PreviousRevision)
    .WithOptionalDependent()
    .Map(m => m.MapKey("PreviousRevisionId"));

,但進行遷移時出現錯誤:

PreviousRevisionId:名稱:類型中的每個屬性名稱都必須是唯一的。 屬性名稱“ PreviousRevisionId”已定義。

因此,基本上,使用流暢的API似乎不可能。 但是我認為注釋功能是流暢的API功能的子集,不是嗎?

當您不想在模型類中將外鍵作為屬性,並且想要重命名EF默認在數據庫中提供的FK列名稱時,可以使用MapKey

因此,您在這里有兩個選擇:

  • 您可以像以前嘗試的那樣一對一地映射關系,但是需要刪除PreviousRevisionId屬性:

     HasOptional(c => c.PreviousRevision).WithOptionalDependent();// If you want now you can rename the FK column using .Map(m => m.MapKey("PreviousRevisionId")); 
  • 或者,您可以創建單向一對多關系:

     HasOptional(c => c.PreviousRevision).WithMany().HasForeignKey(p => p.PreviousRevisionId); 

我認為最后一個選擇更適合您要實現的目標。

請嘗試以下代碼:

public class Revision
{
    public int Id { get; set; }
    ...
    public int? PreviousRevisionId { get; set; }
    public virtual Revision PreviousRevision { get; set; }
    public virtual ICollection<Revision > PreviousRevisions { get; set; }
}

和映射:

HasMany(a => a.PreviousRevisions).WithOptional(p => p.PreviousRevision ).HasForeignKey(p => p.PreviousRevisionId )

暫無
暫無

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

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