【问题标题】:How can I defind that object set was already created?如何找到已经创建的对象集?
【发布时间】:2011-09-23 08:49:01
【问题描述】:

我正在使用实体框架和 mysql。我们创建了一个类

public class DataBaseContext : ObjectContext, IDbContext

有办法

 public IEnumerable<T> Find<T>(Func<T, bool> whereClause) where T : class
        {
            return CreateObjectSet<T>().Where(whereClause);
        }

有没有办法在我每次调用该方法时不创建 ObjectSet?我可以检查它是否已经存在?

【问题讨论】:

    标签: mysql database entity-framework datareader


    【解决方案1】:

    哇哦。那是很糟糕的方法。你传递的是Func&lt;&gt;,而不是Expression&lt;Func&lt;&gt;&gt;。这意味着每次执行方法时,EF 都会从映射到 T 的数据库表中提取所有记录,并在应用程序的内存中执行过滤 - 创建对象集是您最不应该害怕的事情。

    无论如何,创建对象集不应该是昂贵的操作,如果您不想每次都需要在对象上下文实例中实现一些“本地缓存”时创建它。

    【讨论】:

    • 我尝试这样做的原因不是性能。我有一个“已经有一个打开的 DataReader 与此连接关联,必须先关闭它。”异常并尝试以某种方式克服这个问题
    • 该问题与对象集完全无关。您要么将上下文实例用于并发操作(多线程),要么您提到了here 的问题。
    • 感谢您的回答。我昨天已经看到那个帖子了。现在我想弄清楚这对我有什么帮助
    猜你喜欢
    • 2023-01-12
    • 2021-12-24
    • 2016-11-11
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    相关资源
    最近更新 更多