【问题标题】:EF and WinForms - maintaining a static list of entitiesEF 和 WinForms - 维护实体的静态列表
【发布时间】:2013-05-20 19:00:09
【问题描述】:

我在 WinForms 应用程序中使用 EF 5.0。我快速处理 DBContext。

尽管如此,我必须维护一个 Customer 实体的静态列表,我在启动时使用 DBContext 填充该列表 - 再次,快速处理。另外,我在应用程序的某些部分稍微使用了多线程。

问题是我每隔一段时间就会收到此异常:

一个实体对象不能被多个实例引用 IEntityChangeTracker。

我应该在处理 DBContext 之前分离该静态列表中的每个 Customer 吗?我应该为 WinForms 应用程序使用其他设计吗?感谢您的反馈。

【问题讨论】:

    标签: c# winforms entity-framework


    【解决方案1】:

    查询实例时尝试使用 AsNoTracking 方法:http://msdn.microsoft.com/en-us/library/gg679352(v=vs.103).aspx

    【讨论】:

      【解决方案2】:

      考虑构建Data Transfer Objects 以明确分离 EF 和静态列表。

      这样做的主要好处是限制了 EF 对应用程序其余部分的影响。

      【讨论】:

        【解决方案3】:

        我不会使用Customer 实体对象的列表,而是使用一些镜像类型,比如CustomerListItem

        您可以通过将Customers 投影到项目中来填充列表

        db.Customers.Select(c => new CustomerListItem { Name = c.Name, ... })
        

        通过这样做,您可以创建不被跟踪的对象。您将确保实体模型中的更改不会影响依赖于客户列表的应用程序的其他部分。 并且您不会遇到潜在的延迟加载异常(如果Customer 具有延迟导航属性)。

        由于它是一个可供整个应用程序访问的静态列表,我将使用 ReadOnlyCollection

        【讨论】:

          猜你喜欢
          • 2015-05-31
          • 1970-01-01
          • 2011-02-24
          • 1970-01-01
          • 1970-01-01
          • 2021-11-10
          • 1970-01-01
          • 2016-02-01
          • 1970-01-01
          相关资源
          最近更新 更多