修改关系为1:1的实体在插入模式下会导致异常
本文关键字:模式 插入 异常 关系 实体 修改 | 更新日期: 2023-09-27 17:49:15
添加类型为'Scheduler.Models '的实体。UserImage失败,因为另一个相同类型的实体已经具有相同的主键值。当使用"Attach"方法或将实体的状态设置为"Unchanged"或"Modified"(如果图中的任何实体具有冲突的键值)时,可能会发生这种情况。这可能是因为一些实体是新的,还没有接收到数据库生成的键值。
更新关系为1到1的实体错误:
我有两个表User和UserImage的关系0..1。我想将应用程序中用户的图片存储在另一个表中。
用户类:
public partial class User
{
public User()
{
this.FirstName = "";
this.LastName = "";
this.SurName = "";
this.Mail = "";
this.City = "";
this.IsManager = false;
this.IsActive = false;
this.UserLevel = 0;
this.PhoneNumber = "";
this.SiteMembers = new ObservableCollection<SiteMember>();
this.GroupMembers = new ObservableCollection<GroupMember>();
}
public int User_ref { get; set; } // PK Autoinc
public string FirstName { get; set; }
public string LastName { get; set; }
public string SurName { get; set; }
public string Mail { get; set; }
public string City { get; set; }
public bool IsManager { get; set; }
public bool IsActive { get; set; }
public int UserLevel { get; set; }
public string PhoneNumber { get; set; }
public string Password { get; set; }
public virtual ObservableCollection<SiteMember> SiteMembers { get; set; }
public virtual ObservableCollection<GroupMember> GroupMembers { get; set; }
public virtual UserImage UserImage { get; set; }
}
UserImage类:
public partial class UserImage
{
public int Image_Ref { get; set; }// Auto Inc
public int User_Ref { get; set; } //Primary KEy
public byte[] Image { get; set; }
public virtual User User { get; set; }
}
我在记录dbset中添加了实体。
var entity = new User();
DbSet<User> dbSet = db.Set<User>();
dbSet.Add(entity);
db.Entry(entity).State = EntityState.Added;
var entity = new UserImage();
DbSet<UserImage> dbSet = db.Set<UserImage>();
dbSet.Add(entity);
db.Entry(entity).State = EntityState.Added;
为了生成主键,我修改了表单中的一些控件并调用save更改。在保存更改之后,我有了这些代码:
var query = db.UserImages.Include(e => e.User);
UserImage usrImg = query.AsNoTracking()
.Where(e => e.User_Ref == CurrentEntity.User_ref).FirstOrDefault();
db.Entry(usrImg).Entity.Image = UserImageSelection.Image;
db.Entry(usrImg).State = EntityState.Modified;//Over here crashes
"附加一个类型为'Scheduler.Models '的实体。UserImage失败,因为另一个相同类型的实体已经具有相同的主键值。当使用"Attach"方法或将实体的状态设置为"Unchanged"或"Modified"(如果图中的任何实体具有冲突的键值)时,可能会发生这种情况。这可能是因为一些实体是新的,还没有接收到数据库生成的键值。"
CurrentEntity的地方。User_Ref实际上是用户表。我在这里做错了什么,为什么不能在插入模式下修改UserImage表。
对于1-1关系,我非常确定您需要在各自相关实体中拥有两个实体的PK。例如,个人和社会保险号:
public class Person
{
public int ID {get;set;}
public int SocialSecID {get;set;}
}
public class SocialSecurity
{
public int ID {get;set;}
public int PersonID {get;set;}
}
现在,当您插入到表中时,实体的PK和FK都需要是唯一的。但是,使用这种方法,您可以使用SocialSecID
属性查询该人的社保