数据库优先使用桥接表,如何将其排除在模型之外



我正在努力找出如何制作一个桥接表实体,用于多对多关系,对我的模型透明。我使用的是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数据库优先中是否可行,如果是,我如何使用OnModelCreating()中的Fluent API正确连接。

提前感谢您的帮助。

如果只为关系使用ReportGroup,则不需要此POCO类,只需将其映射到ModelCreating:即可

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");
              });
        }
    }

相关内容

  • 没有找到相关文章

最新更新