【发布时间】:2012-03-09 20:23:48
【问题描述】:
为简单起见,我有一个包含 Order 表和 PaymentMethod 表的数据库。这是一对多的关系。 Order 表有许多描述订单的字段,而 PaymentMethod 只有一个 Id 和一个 Name。我已经在 EF 中映射了一个关联,并且 Order 表中有一个名为“PaymentMethodId”的外键。我有一个名为 PaymentMethodType 的枚举,这不是问题所在。我已经测试了下面没有涉及枚举的相同代码。我有许多其他具有相同场景的表,并且在另一种关系中遇到了这种情况,但现在只有这个问题。
在下面的代码中,我创建了一个新订单,一切正常。如果我稍后在我的程序中获得相同的订单并尝试将 PaymentMethodId 设置为不同的值,则程序会挂起大约 25 秒。我试图通过 POCO 对象跟踪代码,它似乎一遍又一遍地循环/设置 PaymentMethod 和 PaymentMethodId。任何建议或意见都非常感谢!!!请随时就我可能遗漏的任何细节提出问题。我正在使用带有 POCO 的 Entity Framework 4.0 以及 SQL Server 2008 R2。
int orderid;
using (PinotsPaletteEntities context = new PinotsPaletteEntities())
{
Order order = new Order();
//assign other order information
order.PaymentMethodId = (int)PaymentMethodType.CreditCard;
context.Orders.AddObject(order);
context.SaveChanges();
orderid = order.Id;
}
using (var context = new PinotsPaletteEntities())
{
Order order2 = context.Orders
.Where(x => x.Id == orderid)
.FirstOrDefault();
order2.PaymentMethodId = (int)PaymentMethodType.Cash; //hangs here for 25secs
context.SaveChanges();
}
【问题讨论】:
-
您使用的是 POCO T4 模板吗?你能验证延迟不是由一些意外的延迟加载引起的吗?
-
如果删除
PaymentMethodId属性并设置PaymentMethod对象会怎样? -
如果我将 PaymentMethod 对象设置为 null 或一个好的对象,我会得到相同的结果。与 PaymentMethodId 相同。
-
您的问题解决了吗?我遇到了一个几乎相同的问题。我正在使用“EF 4.x POCO Entity Generator for C#”扩展。
-
当我在尝试设置外键的表中有大量记录(模型中的订单)时,我看到了挂起。我有大约 70,000 条记录。如果没有记录或记录很少,则不会有明显的延迟。