如何确定对象集已经创建?

发布于 2024-12-06 09:09:33 字数 384 浏览 1 评论 0 原文

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

public class DataBaseContext : ObjectContext, IDbContext

有一个方法

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

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

I'm working with entity framework and mysql. We created a class

public class DataBaseContext : ObjectContext, IDbContext

There is a method

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

Is there a way not to create ObjectSet every time when I call the method? Can I check that it is already exists?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

吃素的狼 2024-12-13 09:09:33

呼呼。那是非常糟糕的方法。您正在传递 Func<>,而不是 Expression>。这意味着每次执行 EF 方法时,都会从映射到 T 的数据库表中提取所有记录,并在应用程序的内存中执行过滤 - 创建对象集是您最不应该担心的事情。

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

Whooooo. That is so bad method. You are passing Func<>, not Expression<Func<>>. It means that every time you execute your method EF will pull all records from database table mapped to T and execute your filtering in memory of your application - creating object set is the last thing you should be afraid of.

Anyway creating object set should not be expensive operation and if you don't want to create it every time you need to implement some "local caching" inside your object context instance.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文