[英]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.