Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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
Asp.net mvc 是否将输入实体与现有实体匹配?_Asp.net Mvc_Entity Framework 4.1_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc 是否将输入实体与现有实体匹配?

Asp.net mvc 是否将输入实体与现有实体匹配?,asp.net-mvc,entity-framework-4.1,asp.net-mvc-4,Asp.net Mvc,Entity Framework 4.1,Asp.net Mvc 4,我正在创建一个WebAPI,前端将发回一个实体列表。其中一些可能已经存在 public void AddTags( List<Tag> tags) //input coming from frontend js { foreach(Tag tag in tags){ //check if tag exists in db //if not, create one } } 我正在寻找类似

我正在创建一个WebAPI,前端将发回一个实体列表。其中一些可能已经存在

    public void AddTags( List<Tag> tags) //input coming from frontend js
    {
        foreach(Tag tag in tags){
          //check if tag exists in db
          //if not, create one

        }
    }

我正在寻找类似于
DbContext.Tags.Match(tag)的东西在给定实体的情况下,它在数据库中查找相同的实体。

您可以在数据库中查找标记的标识符,然后执行以下操作:

如果实体已存在:

context.Tags.Attach(tag);
entry.State = EntityState.Modified;
context.SaveChanges();
否则只会:

context.Tags.Add(tag);
context.SaveChanges();

我不确定您是否可以省略第一个检查,但至少这会起作用。

这可能对您有用。我假设
标记
具有某种类型的唯一标识符(可能是Id或Name属性)。所以你可以一直这样做:

DBContext.Tags.Where(t=>t.Id==tag.Id)

那对你有用吗

更新

根据你上面的评论,我不确定你想要什么。如果您只是“添加”,则不需要检查标记是否存在,对吗

如果你知道你想要对抗什么,你可以这样做是吗


DBContext.Tags.Where(t=>t.name==tag.name&&t.prop1==tag.prop1.FirstOrDefault()

标签是否包含唯一标识符?是的,但我相信当它在js端创建时,uid是空的。这类似于
Tag Tag=new Tag()
在这里,您填写Tag\u名称,但在您执行SaveChanges()之前,不会设置Tag\u id。@Yonk好的,我还不完全清楚。是什么决定了一个标签是否与另一个标签相同?@Yonk你知道所有要提前匹配的属性吗?是的!所有属性都是已知的。我想我现在明白你的意思了:我应该对每个属性运行一个查询,如果它们都匹配,我将链接到数据库中的那个实体?@Yonk是的,我对我的答案做了另一次更新。您需要某种方法来确定唯一性,这将构成查询的基础。
context.Tags.Add(tag);
context.SaveChanges();