默认情况下,实体框架查询本地

本文关键字:查询 框架 实体 情况下 默认 | 更新日期: 2024-11-08 09:39:15

我想在实体框架中执行查询,在访问数据库之前进行搜索时使用本地跟踪实体。我已经编写了一个填充存储库/数据库的复杂例程,现在当我使用实体框架时,它将不使用已添加但尚未保存的实体。因此,此代码片段应仅向数据库添加单个类别,而不是添加 n。

using (Db Db = new Db()) {
    for (int i = 0; i < 10; i++) {
        Category Category = Db.Categories.SingleOrDefault(x => x.Name == "Hello");
        if (Category == null) {
            Category = Db.Categories.Create();
            Category.Name = "Hello";
            Db.Categories.Add(Category);
            Console.WriteLine("Adding item...");
        }
    }
}

我将如何做到这一点?我有一个抽象,允许我从 IQueryable 更改提供程序,我试图使用它首先点击本地集合。我没有成功。请帮忙。

默认情况下,实体框架查询本地

这是一种非常简单易读的方法,尽管它可能不是您想要的:

using (Db Db = new Db()) {
    var newCategories = new List<Category>();
    for (int i = 0; i < 10; i++) {
        Category category = newCategories.SingleOrDefault(x => x.Name == "Hello");
        if (category == null) {
            category = Db.Categories.SingleOrDefault(x => x.Name == "Hello");
            if (category == null) {
                category = Db.Categories.Create();
                category.Name = "Hello";
                Db.Categories.Add(category);
                newCategories.Add(category);
                Console.WriteLine("Adding item...");
            }
        }
    }
}

编写自己的 IQueryable 提供程序是一项非常复杂的任务。

编辑:我发现这篇文章更详细地说明了为什么你试图做的事情不起作用。

以为我不知道您的具体情况是什么,您应该在查询数据存储之前尝试从集合中删除重复项。上述解决方案同时执行此操作。

希望这有帮助。