我正在尝试与关系一侧的快捷方式建立多对多关系。用一些代码来解释会更容易:
public class Product
{
public int Id { get; set; }
public string Description { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
public class Order
{
public int Id { get; set; }
public string Customer { get; set; }
public virtual ICollection<OrderDetail> Details { get; set; }
}
public class OrderDetail
{
public int Id { get; set; }
public Order Order { get; set; }
public Product Product { get; set; }
public int Quantity { get; set; }
}
如您所见,我想在订单方面提供订单详情。但是,在产品方面,我想只有链接的订单。 EF生成错误的数据库模式,因为它在Orders表上添加了Producty_Id FK。
我试图给出具体的模型创建指令而没有成功,如:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>().HasMany(x => x.Orders);
}
感谢您的帮助! 费边
答案 0 :(得分:1)
我想在订单方面提供订单详情。但是,关于 产品方面,我想只有链接的订单。 EF生成 错误的数据库模式,因为它在订单上添加了Producty_Id FK 表
EF无法做到这一点。您可以将其设置为未映射的属性,并在属性内手动实现逻辑。但这将是一个漏洞的抽象。
正确的方法是将OrderDetail
集合属性映射到Product
实体。
public class Product
{
public int Id { get; set; }
public string Description { get; set; }
public virtual ICollection<OrderDetail> OrderDetails { get; set; }
}