【发布时间】:2012-04-09 14:42:31
【问题描述】:
我目前正在使用带有 SQL 2008 R2 的 EF 版本 4.3.1
当我使用应用程序生成的数据运行应用程序时,一切正常,但是一旦我导入数据,那么只有一个属性不想延迟加载。
这是我正在使用的 Order 类:
[DisplayName("Orders")]
public class Order
{
[Key]
[DisplayName("Order Number")]
public virtual string OrderNumber { get; set; }
[StringLength(30, ErrorMessage = "Order name cannot be more than 30 characters.")]
public string Name { get; set; }
[DisplayName("Order Status")]
public virtual OrderStatus OrderStatus { get; set; }
[Timestamp]
public Byte[] TimeStamp { get; set; }
[DisplayName("Customer")]
[Required()]
public virtual Customer Customer { get; set; }
[DisplayName("Order Lines")]
public virtual ICollection<OrderLine> OrderLines { get; set; }
}
当遍历所有订单时:
foreach (var order in orders)
{
returnValue.Add(new FriendlyOrder()
{
Customer = order.Customer.Name,
Name = order.Name,
OrderNumber = order.OrderNumber,
OrderStatus = order.OrderStatus.Status
});
}
订单状态将延迟加载,但客户不会,客户将为空。当我手动运行SQL查询时,关系就在那里,所以它与坏数据无关。
这是客户实体:
[DisplayName("Customers")]
public class Customer
{
[Key]
[DisplayName("Customer Code")]
public string CustomerCode { get; set; }
public virtual ICollection<Order> Orders { get; set; }
public bool Active { get; set; }
[Timestamp]
public Byte[] TimeStamp { get; set; }
}
这里是订单查询:
return (from tbl in db.Orders orderby tbl.OrderNumber select tbl).ToList();
如果我手动将 .Include("Customer") 包含到上述查询中,那么它将加载 Customer 属性,但如果我将两个属性都设置为虚拟,我不需要这样做吗?此外,它适用于应用程序生成的数据,但导入的数据不起作用,除非我将 .Include 添加到查询中?
【问题讨论】:
-
如果您将客户类的所有属性都设为虚拟会怎样?有时我看到即使一个属性是非虚拟 EF 也无法生成代理类型
-
谢谢,但我只是尝试过,没有任何区别。它也没有解释为什么其他属性(订单状态)被延迟加载......
-
导入是指在应用程序之外向数据库添加记录的机制,对吧?
标签: entity-framework ef-code-first code-first