1

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

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

谢谢你的帮助!费边

4

1 回答 1

1

我想在订单方面提供我的订单详细信息。但是,在产品方面,我只想有链接的订单。EF 在 Orders 表上添加 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; }
}
于 2012-06-14T13:16:04.627 回答