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);ます。エンティティが与えられた場合、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 に答える