EF の「コード ファースト」方式でいくつかのコードを試していたところ、奇妙な問題が発生しました。
私のデータコンテキスト:
public class BookmarkerDataContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().HasKey(u => u.UserId);
base.OnModelCreating(modelBuilder);
}
}
ユーザー オブジェクトの場所:
public class User
{
public long UserId { get; set; }
public ICollection<Tag> Tags { get; set; }
}
私のコードでは、かなり単純なことをしています:
public void UpdateUserTags(User user,ICollection<Tag> taglist)
{
user.Tags = new List<Tag>(user.Tags.Union(taglist));
datacontext.Users.Add(user);
datacontext.SaveChanges();
}
この関数に渡すユーザー オブジェクトは、次のような結果です。
datacontext.Users.SingleOrDefault(u => u.UserId==id)
UpdateUserTags 関数を呼び出すたびに、ユーザー テーブルを更新するのではなく、新しい行を作成するように見えます。ここで何か間違ったことをしていますか?