gpt4 book ai didi

c# - 带桥接表的数据库优先,如何将其排除在模型之外

转载 作者:行者123 更新时间:2023-11-30 22:30:15 24 4
gpt4 key购买 nike

我正在尝试找出如何制作桥接表实体,用于多对多关系,对我的模型透明。我正在使用 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 实现,如果可以,我如何使用 OnModelCreating() 中的 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");
});
}
}

关于c# - 带桥接表的数据库优先,如何将其排除在模型之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9745057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com