Asp.net mvc 是否将输入实体与现有实体匹配?
我正在创建一个WebAPI,前端将发回一个实体列表。其中一些可能已经存在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 } } 我正在寻找类似
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();