繁体   English   中英

一对多关系在Entity Framework中返回null

[英]One-to-many relationship returns null in Entity Framework

我正在尝试使用fluent API在Entity Framework和SQL Server中建立关系。 这是我的插入方式:

CREATE TABLE Product (
    id INT PRIMARY KEY NOT NULL IDENTITY(1,1),
    name VARCHAR(255)
);

CREATE TABLE OrderLine (
    id INT PRIMARY KEY NOT NULL IDENTITY(1,1),
    productId INT NOT NULL,
    FOREIGN KEY (productId) REFERENCES Product(id)
);

现在, product具有许多orderLine ,但不知道它们,也不需要知道它们。 例如,我们不需要挑选单个产品并计算订单行的数量。 外观如下:

public class Product {
    public int id { get; set; }

    public string name { get; set; }

    public ICollection<OrderLine> orderLines { get; set; } //not needed but we'll have it anyway
}


public class OrderLine {
    public int id { get; set; }

    public int productId { get; set; }

    public Product product { get; set; }
}

根据entityframeworktutorial.net,这应该可以工作:

modelBuilder.Entity<Product>()
    .HasMany<OrderLine>(s => s.orderLines)
    .WithRequired(s => s.product)
    .HasForeignKey(s => s.productId);

但是,当我尝试将其从数据库中拉出时, product只是null。 这不是一对多的关系吗? 我不太确定自己哪里出了问题。

我不确定这是否是整个问题,因为那里没有太多信息,但是为了延迟加载(看起来像您在尝试),导航属性必须像这样标记为虚拟...

public virtual Product product { get; set; }

否则,EF的代理无法包装它们并完成其工作。

如果未启用延迟加载,则默认情况下,EF不要获取相关实体。 尝试在选择数据时包括所需的实体:

var product = _db.OrderLine.Include(p=>p.Product) 

其他解决方案是在modelBuilder上激活延迟加载,但是请注意,对于复杂的查询或大型表,这可能会对应用程序性能产生重大影响。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM