【发布时间】:2019-04-28 16:40:15
【问题描述】:
我在现有数据库中有三层表,当我获得中间层数据时,我试图包含底层记录...这应该是一对多的关系 - 用于装运 x 和产品 y是 z 分析结果。
public class Shipment
{
[Key]
public int Id { get; set; }
public string ShipName { get; set; }
public DateTime ShipmentDate { get; set; }
}
public class ShipmentDetails
{
[ForeignKey ("ShipmentId")]
public int Id { get; set; }
[ForeignKey ("ProductId")]
public int ProductId { get; set; }
Public double Weight { get; set; }
public virtual ShippingAnalysis Analysis { get; set; }
}
public class ShipmentAnalysis
{
[ForeignKey ("ShipmentId")]
public int Id { get; set; }
[ForeignKey ("ProductId")]
public int TenantId { get; set; }
[ForeignKey ("MetricId")]
public int MetricId { get; set; }
Public double Result { get; set; }
}
我正在使用 fluent api 方式来定义复合主键。
modelBuilder.Entity<ShippingDetail>()
.HasKey(c => new { c.ShipmentId, c.ProductlId });
modelBuilder.Entity<ShippingAnalysis>()
.HasKey(c => new { c.ShipmentId, c.ProductId, c.MetricId });
我获得了带有(一对多)分析记录的运输详细信息。
var results = _context.ShippingDetail.Include(sd => sd.Analysis)
.Where(sd => sd.ShipmentId == id);
这不会在邮递员中返回结果,而是通过浏览器返回格式错误的 JSON。如果我放弃包含,它工作正常。
【问题讨论】:
-
我建议不要使用复合键,而是使用专用 PK 并添加唯一约束以避免重复
-
谢谢@Johnb,但我不确定这将如何帮助我获得包含运输详细信息结果的一对多分析记录?
标签: c# entity-framework-core ef-fluent-api ef-core-2.0