【问题标题】:Entity Framework POCO foreign key assignment is hanging实体框架 POCO 外键分配挂起
【发布时间】: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 条记录。如果没有记录或记录很少,则不会有明显的延迟。

标签: entity-framework-4 poco


【解决方案1】:

我在使用 Entity Framework v4.1 和“ADO.NET C# POCO Entity Generator”(最近重命名为 EF 4.x POCO Entity Generator for C#)设置属性时也遇到了问题。我的项目是使用 ASP.NET MVC 3 用 C# 编写的。

我的症状是更改属性可以在相对较小的数据集(几十个)上正常工作。从遗留系统(大约 70,000 条和数十万条相关记录)导入记录后,设置属性实际上会挂起应用程序。和你一样,我遇到问题的属性是“类型”表的外键。

奇怪的是,设置一些几乎相同的属性可以正常工作。并且设置一次属性就可以了。但是在类型之间切换会挂起应用程序。

通过迁移到较新的EF 4.x DbContext Generator for C#,我至少暂时解决了这个问题。通过 Nuget 升级,这也引入了最新版本的 Entity Framework,它可能也有助于解决问题。迁移到 DbContext 需要最少的代码更改。生成的 POCO 类现在非常干净,没有以前 T4 模板会创建的“修复”代码页面。

【讨论】:

    猜你喜欢
    • 2011-05-09
    • 2011-08-21
    • 2011-07-30
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 2013-04-02
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多