4

我正在尝试首先使用带有代码的 EF5 - 我需要制作一个带有额外字段的多对多表。

我有一个产品表、订单表,并且需要一个带有“尺寸”字段的订单产品表。

我所做的是创建了一个新的“ProductOrder”类,即它们之间的连接表,并进行了引用。

它在创建新订单时工作,但在获取订单时不工作 - 它没有获得连接的订单(插入后存在于数据库中)。

想法为什么?:)

我的课程是:

public class Order
{
    public int ID { get; set; }
    ...
    public ICollection<ProductOrder> Products { get; set; }
    public Order()
    {
        Products = new HashSet<ProductOrder>();
    }
}

public class Product
{
    public int ID { get; set; }
    public ICollection<ProductOrder> Orders { get; set; }
}

public class ProductOrder
{
    public int ID { get; set; }
    public int ProductID { get; set; }
    public int OrderID { get; set; }
    public int Size { get; set; }

    [ForeignKey("OrderID")]
    public Order order { get; set; }

    [ForeignKey("ProductID")]
    public Product product { get; set; }
}

并在 onModelCreating

    modelBuilder.Entity<Order>()
        .HasMany(p => p.Products)
        .WithRequired(o => o.order)
        .HasForeignKey(o => o.OrderID);

    modelBuilder.Entity<Product>()
        .HasMany(o => o.Orders)
        .WithRequired(p => p.product)
        .HasForeignKey(p => p.ProductID);
4

2 回答 2

3

您的导航属性需要是虚拟的

于 2012-12-10T16:16:34.253 回答
0

从我所见,将导航属性标记为虚拟会为这些属性开启延迟加载。

在不延迟加载的情况下使其工作的另一种方法是将.include()语句添加到您的选择中。这告诉 EF 撤回您想要的额外数据。

于 2012-12-10T20:43:29.040 回答