EF代码首先是多对多的快捷方式

时间:2012-06-14 12:57:30

标签: .net ef-code-first

我正在尝试与关系一侧的快捷方式建立多对多关系。用一些代码来解释会更容易:

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);
}

感谢您的帮助! 费边

1 个答案:

答案 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; }
}