0

我正在创建一个 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.Contains(tag),但不确定如何tag与数据库中现有的标签实体链接。

我正在尝试做类似下面的事情:

Tag tag = new Tag();
tag.name = "foo";
tag.someProp1= "hello";
tag.someProp2= "world";
tag.someProp3= "123";
//tag.id = unique id is unknown, decided by db
//find an identical entity exists in db, link `tag` to it
//if no such entity exists, add to DbContext.Tags

我正在寻找类似DbContext.Tags.Match(tag);Where 给定一个实体,它在 db 中寻找一个相同的东西。

4

2 回答 2

1

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

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

这对你有用吗?

更新

根据您上面的评论,我不确定您在追求什么。如果您只是“添加”,那么您不需要检查标签是否存在,对吗?

如果您知道要匹配的对象,您可以这样做吗?

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

于 2012-05-16T22:19:09.373 回答
0

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

如果实体已经存在:

context.Tags.Attach(tag);
entry.State = EntityState.Modified;
context.SaveChanges();

否则只是:

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

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

于 2012-05-16T22:18:45.147 回答