我试图找出如何制作一个桥接表实体,用于多对多关系,对我的模型透明。我正在使用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 是否可以实现数据库优先,如果是这样,我如何使用 Fluent API 正确连接它模型创建时().
先谢谢您的帮助。
如果您仅将 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");
});
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)