附加“Scheduler.Models.UserImage”类型的实体失败,因为同一类型的另一个实体已具有相同的主键值。如果图中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。这可能是因为某些实体是新的并且尚未收到数据库生成的键值。
错误更新关系为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; }
}
我在录制DbSets中添加了实体。
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;
我修改表单中的一些控件并调用保存更改以生成主键。 在savechanges之后,我有这个代码:
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'方法或将实体的状态设置为如果图中的任何实体具有冲突的键值,则“未更改”或“已修改”。这可能是因为某些实体是新的并且尚未收到数据库生成的键值。“
其中CurrentEntity.User_Ref实际上是用户表。我在这里做错了什么,为什么在插入模式下无法修改UserImage表。
答案 0 :(得分:0)
对于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
属性查询此人的SocialSecurity。