2 つのモデルがあるとします。
public class User
{
[Key]
public int UserId { get; set; }
public string Name { get; set; }
}
と
public class Friend
{
[Key]
public int FriendId { get; set; }
public User A { get; set; }
public User B { get; set; }
}
データベースに 2 人のユーザーしかいないとします (ID: 1 (Jon) と 2 (Sam))。今、私はこのようにテーブルに挿入しますfriend
:
db.Friends.Add(new Friend()
{
A = db.Users.Find(1),
B = db.Users.Where(u => u.UserId == 2).First()
});
db.SaveChanges();
突然、テーブルでユーザー (3、Sam) を見つけましたuser
。この背後にある理由は何ですか?関連するかどうかは完全にはわかりませんが、A フィールドと B フィールドを仮想化しても何も変わらないことに注意してください。
アップデート
最後に、私の問題を再現する方法を見つけました。どうやら、問題は私が説明したものとまったく同じではないようです。
User a, b;
using (var db = new DbConnection())
{
a = db.Users.First(u => u.UserId == 1);
b = db.Users.First(u => u.UserId == 2);
}
using (var db = new DbConnection())
{
db.Friends.Add(new Friend()
{
A = a,
B = b
});
db.SaveChanges();
}
users
これでユーザーは 4 人になりました。トランザクションを終了すると、エンティティが現在のトランザクションとまったく同じアイテムであるかのようにアクセスできなくなるということですか? または、同じアイテムを参照していることをプログラムに知らせる方法がありますか (ID が同じであるため)。