Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 默认情况下,实体框架查询是本地的_C#_Asp.net_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 默认情况下,实体框架查询是本地的

C# 默认情况下,实体框架查询是本地的,c#,asp.net,asp.net-mvc,entity-framework,C#,Asp.net,Asp.net Mvc,Entity Framework,我希望在实体框架中执行查询,在访问数据库之前进行搜索时使用本地跟踪的实体。我已经编写了一个填充存储库/数据库的复杂例程,现在当我使用EntityFramework时,它不会使用已经添加但尚未保存的实体。因此,这段代码应该只向数据库添加一个类别,而不是添加n using (Db Db = new Db()) { for (int i = 0; i < 10; i++) { Category Category = Db.Categories.SingleOrDefaul

我希望在实体框架中执行查询,在访问数据库之前进行搜索时使用本地跟踪的实体。我已经编写了一个填充存储库/数据库的复杂例程,现在当我使用EntityFramework时,它不会使用已经添加但尚未保存的实体。因此,这段代码应该只向数据库添加一个类别,而不是添加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...");
        }
    }
}
使用(Db=new Db()){
对于(int i=0;i<10;i++){
Category Category=Db.Categories.SingleOrDefault(x=>x.Name==“Hello”);
如果(类别==null){
Category=Db.Categories.Create();
Category.Name=“你好”;
Db.Categories.Add(类别);
Console.WriteLine(“添加项…”);
}
}
}

我该怎么做呢?我有一个抽象,它允许我从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...");
            }
        }
    }
}
使用(Db=new Db()){
var newCategories=新列表();
对于(int i=0;i<10;i++){
Category Category=newCategories.SingleOrDefault(x=>x.Name==“Hello”);
如果(类别==null){
category=Db.Categories.SingleOrDefault(x=>x.Name==“Hello”);
如果(类别==null){
category=Db.Categories.Create();
category.Name=“你好”;
Db.Categories.Add(类别);
新增类别。添加(类别);
Console.WriteLine(“添加项…”);
}
}
}
}
编写自己的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...");
            }
        }
    }
}
使用(Db=new Db()){
var newCategories=新列表();
对于(int i=0;i<10;i++){
Category Category=newCategories.SingleOrDefault(x=>x.Name==“Hello”);
如果(类别==null){
category=Db.Categories.SingleOrDefault(x=>x.Name==“Hello”);
如果(类别==null){
category=Db.Categories.Create();
category.Name=“你好”;
Db.Categories.Add(类别);
新增类别。添加(类别);
Console.WriteLine(“添加项…”);
}
}
}
}
编写自己的IQueryable提供程序是一项非常复杂的任务

编辑:我找到了一个更详细的例子,解释了为什么你试图做的事情不起作用

虽然我不知道您的具体情况,但在查询数据存储之前,您应该尝试从集合中删除重复项。上述解决方案同时实现了这一点


希望这有帮助。

我很好奇。您计划如何查询尚未保存的实体?任何数据库生成的id都将为0,因为它们尚未创建。所以没有身份。当然,你可以质疑其他事情,但这似乎是一种刻薄和拙劣的做法。我很好奇,为什么不保留自己的物品集合,并使用linq来对抗它呢。您计划如何查询尚未保存的实体?任何数据库生成的id都将为0,因为它们尚未创建。所以没有身份。当然,你可以质疑其他事情,但这似乎是一种刻薄和拙劣的做法。为什么不保留您自己的项目集合,并使用linq对其创建对象?