【发布时间】:2017-02-14 07:40:13
【问题描述】:
我有两个实体,当我只更新或添加一个时,一切正常
db.Entry(user1).State = EntityState.Modified;
foreach (var userAudio in user1.Audios)
{
db.Audios.AddOrUpdate(userAudio);
}
db.Users.AddOrUpdate(user1);
db.SaveChanges();
但如果我尝试添加/更新几个实体:
db.Entry(user1).State = EntityState.Modified;
foreach (var userAudio in user1.Audios)
{
db.Audios.AddOrUpdate(userAudio);
}
db.Users.AddOrUpdate(user1);
db.Entry(user2).State = EntityState.Modified;
foreach (var userAudio in user2.Audios)
{
db.Audios.AddOrUpdate(userAudio);
}
db.Users.AddOrUpdate(user2);
db.SaveChanges();
抛出异常:
附加类型为“EfTest.Entities.Audio”的实体失败,因为 另一个相同类型的实体已经具有相同的主键 价值...
也许是因为我在 user1 和 user2 中有相同的音频,而 EF 无法插入它们...有人知道如何解决这个问题吗?谢谢!
实体
namespace EfTest.Entities
{
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public List<Audio> Audios { get; set; }
}
public class Audio
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
public string Artist { get; set; }
public string Title { get; set; }
public List<User> Users { get; set; }
}
}
【问题讨论】:
-
@Antonio 它不起作用 =(
-
如果你改变 public List
-
@Antonio 无论如何我认为同样的音频有这个问题,因为如果我删除它们,一切正常
-
在每个 db.Users.AddOrUpdate();使用 db.SaveChanges();
-
@AnilPanwar 不起作用(
标签: c# asp.net asp.net-mvc entity-framework ado.net