Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 如何使用实体框架在数据库中添加不同的值 IEnumerable data=GetWebPages(); foreach(数据中的var值) { if(value.WebPage.Contains(“.htm”)) { WebsiteWebPage pagesinfo=新网站网页(); pagesinfo.WebPage=value.WebPage; pagesinfo.WebsiteId=网站ID; 添加(pagesinfo); } } db.SaveChanges();_C#_Entity Framework - Fatal编程技术网

C# 如何使用实体框架在数据库中添加不同的值 IEnumerable data=GetWebPages(); foreach(数据中的var值) { if(value.WebPage.Contains(“.htm”)) { WebsiteWebPage pagesinfo=新网站网页(); pagesinfo.WebPage=value.WebPage; pagesinfo.WebsiteId=网站ID; 添加(pagesinfo); } } db.SaveChanges();

C# 如何使用实体框架在数据库中添加不同的值 IEnumerable data=GetWebPages(); foreach(数据中的var值) { if(value.WebPage.Contains(“.htm”)) { WebsiteWebPage pagesinfo=新网站网页(); pagesinfo.WebPage=value.WebPage; pagesinfo.WebsiteId=网站ID; 添加(pagesinfo); } } db.SaveChanges();,c#,entity-framework,C#,Entity Framework,在上面的代码中,我只想向数据库添加不同的值。请帮助我如何做,因为我无法找到任何解决方案。假设您需要它们在网页和网站ID上是唯一的 IEnumerable data=GetWebPages(); foreach(数据中的var值) { if(value.WebPage.Contains(“.htm”)) { WebsiteWebPage pagesinfo=新网站网页(); if(db.websitewebages.All(c=>c.WebPage!=value.WebPage | | c.Web

在上面的代码中,我只想向数据库添加不同的值。请帮助我如何做,因为我无法找到任何解决方案。

假设您需要它们在网页和网站ID上是唯一的

IEnumerable data=GetWebPages();
foreach(数据中的var值)
{
if(value.WebPage.Contains(“.htm”))
{
WebsiteWebPage pagesinfo=新网站网页();
if(db.websitewebages.All(c=>c.WebPage!=value.WebPage | | c.WebsiteId!=WebsiteId))
{
pagesinfo.WebPage=value.WebPage;
pagesinfo.WebsiteId=网站ID;
添加(pagesinfo);
}
}
}
db.SaveChanges();
更新

要对此进行优化(假设您的表包含的数据比当前列表多得多),请覆盖
网站网页
中的
equals
类以定义唯一性条件,然后:

var myWebsiteWebPages=data.select(x=>newWebsiteWebPages{WebPages=x.WebPages,WebsiteId=WebsiteId}).Distinct();
var duplicates=db.WebsiteWebPages.Where(x=>myWebsiteWebPages.Contains(x));
db.WebsiteWebPages.AddRange(myWebsiteWebPages.Where(x=>!duplicates.Contains(x));
这是一个单数据库查询,仅检索重复项,然后将其从列表中删除

我假设“不同的值”是指“不同的
value.WebPage
value”:

IEnumerable data=GetWebPages();
foreach(数据中的var值)
{
if(value.WebPage.Contains(“.htm”))
{
var a=db.WebsiteWebPages.Where(i=>i.webPages==value.webPages.ToString()).ToList();
如果(a.Count==0)
{
WebsiteWebPage pagesinfo=新网站网页();
pagesinfo.WebPage=value.WebPage;
pagesinfo.WebsiteId=网站ID;
添加(pagesinfo);
db.SaveChanges();
}
}
}

这是我用来添加不同数据的代码。我希望它对您有所帮助。

您可以使用以下代码

   IEnumerable<WebsiteWebPage> data = GetWebPages();

                        foreach (var value in data)
                        {
                            if (value.WebPage.Contains(".htm"))
                            {
                                var a = db.WebsiteWebPages.Where(i => i.WebPage == value.WebPage.ToString()).ToList();
                                if (a.Count == 0)
                                {
                                    WebsiteWebPage pagesinfo = new WebsiteWebPage();
                                    pagesinfo.WebPage = value.WebPage;
                                    pagesinfo.WebsiteId = websiteid;
                                    db.WebsiteWebPages.Add(pagesinfo);
                                    db.SaveChanges();
                                }
                            }
                        }

除了提供的代码示例FurkanÖztürk外,请确保您的数据库具有约束,以便您不能在列中输入重复的值。皮带和支架的方法。

什么是不同的值?这里的唯一值是什么?我猜
db.WebsiteWebPages.All(…)
将对
数据中的每个
值发出
SELECT
请求?是的,它将发出请求。如果列表中有10000项-这将是10000个无用的SQL查询。@vasily.sib Agree。。。这不是我写这篇文章的方式,但这是我回答某人问我他的代码有什么问题的方式。。。您的解决方案可能比我的解决方案更糟糕,因为它有一个巨大的表,而实体无法处理
。其中(x=>myWebsiteWebPage.Contains(x))
,此外,您不仅需要重写
.Equals()
,还需要重写
.GetHashCode()
,以使用
.Distinct()的无参数版本
@vasily.sib EF 4+支持
Contains()
查询,该查询保证插入不同的值,但不保证这些值在数据库中不存在,因此插入不同的值duplicate@jalsh,现在它保证这些值在dbSo中不存在,如果这是在一个10亿记录表中插入5个项目,那么您将在内存中加载几GB并对其进行迭代?那么,如果这是在一个5记录表中插入10亿项目,那么您将在内存中向数据库加载几GB并让它对其进行迭代?(你也会在你这边迭代它来序列化它以便发送)正是我的观点,你不能告诉他什么是他的问题的最佳解决方案,你只需要给他一个有效的解决方案,当他询问性能并给出信息时,你就会这样做
网站网页
是一个对象,所以
templast.Distinct()
将通过引用而不是
网页
值进行检查,因此
模板列表中的所有项目都将保留
// get existing values (if you ever need this)
var existingWebPages = db.WebsiteWebPages.Select(v => v.WebPage);
// get your pages
var webPages = GetWebPages().Where(v => v.WebPage.Contains(".htm"));

// get distinct WebPage values except existing ones
var distinctWebPages = webPages.Select(v => v.WebPage).Distinct().Except(existingWebPages);
// create WebsiteWebPage objects
var websiteWebPages = distinctWebPages.Select(v =>
    new WebsiteWebPage { WebPage = v, WebsiteId = websiteid});

// save all at once
db.WebsiteWebPages.AddRange(websiteWebPages);
db.SaveChanges();
   IEnumerable<WebsiteWebPage> data = GetWebPages();

                        foreach (var value in data)
                        {
                            if (value.WebPage.Contains(".htm"))
                            {
                                var a = db.WebsiteWebPages.Where(i => i.WebPage == value.WebPage.ToString()).ToList();
                                if (a.Count == 0)
                                {
                                    WebsiteWebPage pagesinfo = new WebsiteWebPage();
                                    pagesinfo.WebPage = value.WebPage;
                                    pagesinfo.WebsiteId = websiteid;
                                    db.WebsiteWebPages.Add(pagesinfo);
                                    db.SaveChanges();
                                }
                            }
                        }
IEnumerable<WebsiteWebPage> data = GetWebPages();

var templist = new List<WebsiteWebPage>();
foreach (var value in data)
{
    if (value.WebPage.Contains(".htm"))
    {
        WebsiteWebPage pagesinfo = new WebsiteWebPage();
        pagesinfo.WebPage = value.WebPage;
        pagesinfo.WebsiteId = websiteid;

        templist.Add(pagesinfo);
    }
}
var distinctList = templist.GroupBy(x => x.WebsiteId).Select(group => group.First()).ToList();
db.WebsiteWebPages.AddRange(distinctList);
db.SaveChanges();
var res = tempList.Distinct(x=>x.WebsiteId).ToList();
db.WebsiteWebPages.AddRange(res);
db.SaveChanges();