我知道这样的问题已经有人问过了,但是我的情况有点不同,我正在尝试向数据库中插入一个新的item
实体。
public class Item : MasterData
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ItemId { get; set; }
public string Name { get; set; }
public string Code { get; set; }
public User CreatedUser { get; set; }
public User ModifiedUser { get; set; }
}
用户POCO
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
第一次插入时,CreatedUser
和ModifiedUser
是相同的。表示主键值相同(本例中为UserId
)
由于用户已经存在于数据库中,我不希望EF再次尝试插入它,所以我这样做了。
DbContext.Users.Attach(itemSet.CreatedBy);
DbContext.Users.Attach(itemSet.ModifiedBy);
await _UCMSContext.AddAsync(itemSet);
await _UCMSContext.SaveChangesAsync();
但我收到以下错误
无法跟踪实体类型“UserSet”的示例,因为已在跟踪另一个具有与{“UserId”}相同键值的示例。附加现有实体时,请确保仅附加一个具有给定键值的实体示例
如何摆脱这种情况,并保存CreatedUser
和ModifiedUser
具有相同值的item
?
1条答案
按热度按时间qni6mghb1#
同一实体(用户)在上下文中附加了两次。要避免这种情况,请仅在创建者用户不同时附加修改者用户: