Entity Framework 插入数据出现重复插入(导航属性硬是要查再一遍???????)

时间:2022-08-13 19:11:44

问题:

Artist artmodel = new Artist();
artmodel.user = uinfo;
_artiests.Add(artmodel);

新增一条Artist记录,但是同时数据库也新增 了一条User用户记录

解决:http://q.cnblogs.com/q/62950/

需要再查一遍当前用户信息

Artist artmodel = new Artist();
artmodel.user = _users.FindByLoginName(uinfo.LoginName);
_artiests.Add(artmodel);

------------------------------------

2014-07-01补充:当在实体类Artist中User属性没有加virtual情况下还是会新增一条相同的用户记录

------------------------------------

2015-03-23补充

使用不同上下文对象,测试一下:

  static void Main(string[] args)
{
User currLogin;
using (DB db = new DB()) {
currLogin = db.User.FirstOrDefault(u=>u.ID==1);
} using (DB db = new DB()) {
Album album = new Album();
album.Title = "默认相册";
album.CreateTime = DateTime.Now;
album.Owner = currLogin;
db.Album.Add(album);
db.SaveChanges();
} Console.ReadKey();
}

插入结果,Owner_ID居然不是“1”(我的Id是1),而是在User表新增了一条跟userId=1相同的数据

Entity Framework  插入数据出现重复插入(导航属性硬是要查再一遍???????)

使用Sql server profilter跟踪,savechange()  确实可以看到有两条插入语句

Entity Framework  插入数据出现重复插入(导航属性硬是要查再一遍???????)

当将Owner改为

album.Owner = db.User.FirstOrDefault(u => u.ID == currLogin.ID);

结果就正常了

Entity Framework  插入数据出现重复插入(导航属性硬是要查再一遍???????)

结论:使用不同db对象时会创建新的记录(EF最让人不爽的地方,导航属性硬是要查再一遍????????????????????????????????????)

------------------------------------------