1

我想在访问数据库之前在搜索时在使用本地跟踪实体的实体框架中执行查询。我编写了一个复杂的例程来填充存储库/数据库,现在当我使用实体框架时,它不会使用已经添加但尚未保存的实体。因此,这段代码应该只向数据库添加一个类别,而不是添加 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 更改提供程序,我尝试使用它来首先访问 Local 集合。我没有成功。请帮忙。

4

1 回答 1

1

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

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 提供程序是一项非常复杂的任务。

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

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

希望这可以帮助。

于 2012-08-08T22:37:45.940 回答