EF核心多對多配置無法使用Fluent API

asp.net c# entity-framework entity-framework-core

我在使用FLuent API和EF Core理解和實現多對多的重複性方面遇到了麻煩。

我已經查看了這個問題並完全建立了我的關係但是我收到以下錯誤:

錯誤CS1061'CollectionNavigationBuilder'不包含'WithMany'的定義,並且沒有擴展方法'WithMany'可以找到類型'CollectionNavigationBuilder'的第一個參數(你是否缺少using指令或彙編引用?)

這是我的意圖。我有一個有很多工作的客戶。我應該能夠獲得與該客戶相關的所有工作。 EF應該在後台創建連接表...

這是我的課程:

public class Client : IEntityBase
{
    public int Id { get; set; }

    public int? JobId { get; set; }
    public ICollection<Job> Jobs { get; set; }
}

public class Job : IEntityBase
{
    public int Id { get; set; }
}

//my interface
public interface IEntityBase
{
    int Id { get; set; }
}

編輯這是我試過的Fluent API,我在“.withMany”上收到錯誤

        modelBuilder.Entity<Client>()
            .HasMany(p => p.Jobs)
            .WithMany(p => p.clients)
            .Map(m =>
            {
                m.MapLeftKey("ClientId");
                m.MapRightKey("JobId");
                m.ToTable("ClientJob");
            });

我根據Chris Sakell的博客使用通用存儲庫模式。以下是檢索客戶端的代碼:

        IEnumerable<Client> _clients = _clientRepository
           .AllIncluding(s => s.Creator, s => s.Jobs, s => s.State)
           .OrderBy(s => s.Id)
           .Skip((currentPage - 1) * currentPageSize)
           .Take(currentPageSize)
           .ToList();

我按照以下方式使用通用代碼:

    public virtual IEnumerable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties)
    {
        IQueryable<T> query = _context.Set<T>();
        foreach (var includeProperty in includeProperties)
        {
            query = query.Include(includeProperty);
        }
        return query.AsEnumerable();
    }

我如何配置這個以便我可以根據上面的Allincluding語句使用includeproperty來檢索作業?

熱門答案

您嘗試實現的Fluent API示例來自EF 6.許多對多關係配置在EF Core中略有不同。首先,您需要包含一個實體來表示join / bridging表:

public class ClientsJobs
{
    public int ClientId { get; set; }
    public int JobId { get; set; }
    public Client Client { get; set; }
    public Job Job { get; set; }
}

然後在OnModelCreating方法中將其配置為:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<ClientsJobs>()
        .HasKey(x => new { x.ClientId, x.JobId });

    modelBuilder.Entity<ClientsJobs>()
        .HasOne(x => x.Client)
        .WithMany(y => y.Jobs)
        .HasForeignKey(y => y.JobId);

    modelBuilder.Entity<ClientsJobs>()
        .HasOne(x => x.Job)
        .WithMany(y => y.Clients)
        .HasForeignKey(y => y.ClientId);
}

在此處查看更多相關信息: http//www.learnentityframeworkcore.com/configuration/many-to-many-relationship-configuration

注意:您確實需要包括在相關類的關係兩端的導航性能,所以你需要一個添加Clients屬性與您的Job單位。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow