【发布时间】:2019-07-09 18:24:52
【问题描述】:
我正在尝试学习 C# Fluent API,但我的模型设置遇到了问题(我认为)。我有三个表:OrderFile、Order、LineItem。错误:
检测到类型为“BaseService.WebApi.Order”的属性“order”的自引用循环。路径'orders[0].lineItems[0]'。
我的结构:
- OrderFile 包含
List<Orders> - 订单包含
List<ListItems>和导航属性OrderFile - ListItem 包含一个导航属性
Order
它们与 Fluent API 中指定的 ForeignKey 约束绑定在一起。约束有问题吗?我试图关注这个example for Foreign keys
modelBuilder.Entity<OrderFile>(e =>
{
//many orders within one order file
//the FK relates the OrderFile to the nav key of the Order
e.HasMany(of => of.Orders)
.WithOne(o => o.orderFile)
.HasForeignKey(o => o.FileGuid);
e.HasKey(o => o.FileGuid);
});
modelBuilder.Entity<Order>(e =>
{
//each order has an array of line items
//each line item has one order (navigation property)
//the foreign key of the line item ties it to the Parent (List<Order>)
e.HasMany(o => o.LineItems)
.WithOne(li => li.order)
.HasForeignKey(o => o.OrderGuid);
e.HasKey(o => o.OrderGuid);
});
型号
public class OrderFile
{
public Guid FileGuid { get; set; }
public virtual ICollection<Order> Orders { get; set; } //everything with same FileGuid
}
public class Order
{
....
[JsonIgnore]
public Guid FileGuid { get; set; }
[Key]
public Guid OrderGuid { get; set; }
[JsonIgnore]
public OrderFile orderFile { get; set; }
public virtual ICollection<LineItem> LineItems { get; set; } //everything with same OrderGuid
}
public class LineItem
{
....
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public Guid OrderGuid { get; set; }
public Order order { get; set; }
}
【问题讨论】:
-
LineItem 有流畅的标记吗?
-
根据错误,订单进入订单项,订单项返回订单......这会导致循环依赖。
-
@TonyAbrams,不,我还是新手,但我虽然 LineItem 关系是根据父订单指定的。有错吗?
-
我的经验是你需要选择一个实体来拥有关系和导航属性......否则你最终会出现自引用循环。
-
请同时显示引发异常的代码,以及异常类型和EF版本。
标签: c# entity-framework fluent