在ASP.NET中,可以通过使用导航属性来加载通过两个外键间接连接的另一个模型的数据模型。下面是一个示例解决方法:
假设有三个数据模型:ModelA
,ModelB
和ModelC
。其中,ModelA
和ModelB
分别具有一个外键,它们之间通过ModelC
进行间接连接。
public class ModelA
{
public int Id { get; set; }
public string Name { get; set; }
public int ModelCId { get; set; }
public ModelC ModelC { get; set; }
}
public class ModelB
{
public int Id { get; set; }
public string Name { get; set; }
public int ModelCId { get; set; }
public ModelC ModelC { get; set; }
}
public class ModelC
{
public int Id { get; set; }
public string Name { get; set; }
}
public class ApplicationDbContext : DbContext
{
public DbSet ModelAs { get; set; }
public DbSet ModelBs { get; set; }
public DbSet ModelCs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasOne(a => a.ModelC)
.WithMany()
.HasForeignKey(a => a.ModelCId);
modelBuilder.Entity()
.HasOne(b => b.ModelC)
.WithMany()
.HasForeignKey(b => b.ModelCId);
}
}
在控制器中,可以使用Include
方法来加载关联的模型数据。
public class MyController : Controller
{
private readonly ApplicationDbContext _context;
public MyController(ApplicationDbContext context)
{
_context = context;
}
public IActionResult Index()
{
var modelAs = _context.ModelAs.Include(a => a.ModelC).ToList();
var modelBs = _context.ModelBs.Include(b => b.ModelC).ToList();
// 处理数据
return View();
}
}
在上面的示例中,通过使用Include
方法,可以在加载ModelA
和ModelB
的同时,通过导航属性ModelC
加载相关的ModelC
数据。