簡體   English   中英

ef核心忽略導航屬性

[英]ef core ignore navigation property

我有一個實體User ,它有兩個屬性CreatedByUpdatedBy都引用User 默認情況下,EF假定這兩者是彼此一對一的關系。 我收到以下錯誤消息:

消息:System.InvalidOperationException:無法確定在“User.CreatedBy”和“User.UpdatedBy”之間檢測到的一對一關系的子/依賴方。 要標識關系的子/依賴方,請配置外鍵屬性。 如果這些導航不應該是相同關系的一部分,則在不指定反向的情況下配置它們。 有關詳細信息,請參閱http://go.microsoft.com/fwlink/?LinkId=724062

目前,我有一個這樣的類:

public class User
{

    public int Id { get; set; }

    public int? CreatedById { get; set; }
    public User CreatedBy { get; set; }

    public int? UpdatedById { get; set; }
    public User UpdatedBy { get; set; }

}

基本上,這是我正在嘗試的:

  • 創建和更新將彼此無關(不需要導航/反向屬性)
  • 任意數量的用戶都可以擁有相同的CreatedBy並且任意數量的用戶都可以擁有相同的UpdatedBy

如何讓EF忽略導航屬性? 我有CreatedBy是我以后可以使用Include(u => u.CreatedBy) 我知道使用IEnumerable<User> AllCreatedUsers屬性可以解決這個問題,但我不想為我的實體中的每一個創建一個IEnumerable 有沒有辦法用流暢的API做到這一點?

這是我嘗試過的:

modelBuilder.Entity<User>()
                .Property<IEnumerable<User>>("AllCreatedUsers");

modelBuilder.Entity<User>().HasOne(u => u.CreatedBy)
                                .WithMany(u => EF.Property<IEnumerable<User>>(u, "AllCreatedUsers"));

您需要使用無參數WithMany方法重載來配置兩個單導航屬性關系:

modelBuilder.Entity<User>()
    .HasOne(u => u.CreatedBy)
    .WithMany();

modelBuilder.Entity<User>()
    .HasOne(u => u.UpdatedBy)
    .WithMany(); 

您對兩個屬性的ForeignKey數據注釋。

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

    public int? CreatedById { get; set; }
    [ForeignKey("CreatedById")]
    public User CreatedBy { get; set; }

    public int? UpdatedById { get; set; }
    [ForeignKey("UpdatedById")]
    public User UpdatedBy { get; set; }
}

暫無
暫無

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

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