Сначала база данных с таблицей мостов, как сохранить ее вне модели - PullRequest
2 голосов
/ 17 марта 2012

Я пытаюсь выяснить, как я могу сделать объект таблицы мостов, используемый для отношений многие ко многим, прозрачным для моей модели.Я использую EF База данных сначала .

Обсуждаемые таблицы ... (упрощенно)

Report
- ReportId INT PK
- ReportName VARCHAR(50)

Group
- GroupId INT PK
- GroupName VARCHAR(50)

ReportGroup
 - ReportId INT PK
 - GroupId INT PK

Структура текущего класса ... (упрощенно)

public class Report
{
     public int ReportId { get; set; }
     public string ReportName { get; set; }
     public IList<ReportGroup> ReportGroups { get; set; }
}

public class Group
{
     public int GroupId { get; set; }
     public string GroupName { get; set; }
     public IList<ReportGroup> ReportGroups { get; set; }
}

public class ReportGroup
{
     public int ReportId { get; set; }
     public Report Report { get; set; }
     public int GroupId { get; set; }
     public Group Group { get; set; }
}

Чтобы использовать группы, к которым принадлежит отчет, нужно что-то вроде этого ...

// Getting a report's groups
var report = this.ReportService.GetReportById(123456);
var groups = report.ReportGroups.Select(x => x.Group).ToList();

Это не совсем тоЯ хочу использовать всюду по моему заявлению.В идеале я хотел бы, чтобы таблица мостов и сущность (ReportGroup) были прозрачными, что позволяло бы мне работать с такими сущностями, как эта ...

// Getting a report's groups
var report = this.ReportService.GetReportById(123456);
var groups = report.Groups;

// Getting a group's reports
var group = this.ReportService.GetGroupById(1);
var reports = group.Reports;

Поэтому мой вопрос заключается в том, возможно ли это с EF Database First , и если да, то как правильно подключить это с помощью Fluent API в OnModelCreating ().

Заранее спасибо за помощь.

1 Ответ

3 голосов
/ 17 марта 2012

Если вы используете ReportGroup только для отношений, вам не нужен этот класс POCO, просто отобразите его OnModelCreating:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
...
modelBuilder.Configurations.Add(new GroupMap());
...
}

public class GroupMap : EntityTypeConfiguration<Group>
    {
        public GroupMap()
        {
            // Relationships
            this.HasMany(e => e.Reports)
              .WithMany(set => set.Groups)
              .Map(mc =>
              {
                  mc.ToTable("groupreporttablename");
                  mc.MapLeftKey("GroupID");
                  mc.MapRightKey("ReportID");
              });
        }
    }
...