Entity Framework Core получение связанных сущностей - PullRequest
0 голосов
/ 29 мая 2020

Я новичок в EF C и надеялся получить некоторую помощь с проблемой, с которой я столкнулся. Предположим, у меня есть две таблицы:

Таблица инструментов:

Version  FeatureId 

1         1

1         2

1         4

2         1

Таблица функций:

FeatureId Name

1         feature1

2         feature2

3         feature3

4         feature4

и на основе этих двух таблиц у меня есть следующее:

public class Tool
{

public int Id {get; set;}

public int Version { get; set; } 

public List<Feature> Features { get; set; }

}

public class Feature
{

public string FeatureId { get; set; }

public string Name { get; set; }
}

, поэтому версия инструмента может включать в себя несколько функций, а функция может быть включена в несколько версий. Когда я попытался получить инструмент, основанный на номере версии, например:

_context.Tool.Where(x => x.Version == versionID)
           .Include(i => i.Features)
           .ToList()

, я столкнулся с ошибкой с запросом ToolId. Это почему?

1 Ответ

0 голосов
/ 29 мая 2020

версия инструмента может включать более одной функции, а функция может быть включена более чем в одну версию.

Итак, у вас есть взаимосвязь "многие ко многим", и ваши таблицы должны как показано ниже:

public class Tool
{
    public int Id {get; set;}
    public int Version { get; set; } 
    public ICollection<Feature> Features { get; set; }
}

public class Feature
{
    public string FeatureId { get; set; }
    public string Name { get; set; }
    public ICollection<Tool> Tools { get; set; }
}

И пропущенный:

public class ToolsFeatures
{
    public int ToolId { get; set; }
    public Tool Tool { get; set; }

    public int FeatureId { get; set; }
    public Feature Feature { get; set; }
}

Затем настройте отношения dbcontext:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<ToolsFeatures>()
        .HasKey(t => new { t.ToolId, t.FeatureId});

        modelBuilder.Entity<ToolsFeatures>()
            .HasOne(t => t.Tool)
            .WithMany(f => f.Features)
            .HasForeignKey(t => t.ToolId);

        modelBuilder.Entity<ToolsFeatures>()
            .HasOne(f => f.Feature)
            .WithMany(t => t.Tools)
            .HasForeignKey(f => f.FeatureId);
    }

См. Many-to -Множество сообщений


Примечание: FeatureId определен как string, но имеет int значения! здесь есть ошибка?

...