我正在努力找出如何制作一个桥接表实体,用于多对多关系,对我的模型透明。我使用的是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");
});
}
}