保存配置文件对象不会从实体框架中的数据库中删除旧属性
本文关键字:数据库 删除 属性 框架 实体 对象 配置文件 保存 | 更新日期: 2023-09-27 18:36:31
我有一个名为BandyProfile
的对象,在我的服务层中,我修改了配置文件并保存。
public void SaveProfile(string userId, System.Collections.Specialized.NameValueCollection request)
{
BandyProfile bandyProfile = _bandyProfileRepository.Find(userId);
bandyProfile.CatchPhrase = request[0];
bandyProfile.StartedPracticing = Convert.ToInt16(request[1]);
bandyProfile.Education = request[2];
bandyProfile.Work = request[3];
bandyProfile.WhyIPractice = request[4];
bandyProfile.Inspirations = request[5];
bandyProfile.IsATeacher = Convert.ToBoolean(request[6]);
bandyProfile.TrainingCertification = request[7];
bandyProfile.YogaClasses = GetSelectedClasses(request[8]);
bandyProfile.StartedTeaching = Convert.ToInt16(request[9]);
bandyProfile.WhyITeach = request[10];
_bandyProfileRepository.Save();
}
YogaClasses
是YogaClass
的ICollection
public class YogaClass
{
public int YogaClassId { get; set; }
public YogaStyle YogaStyle { get; set;}
[Index]
[Required]
public string BandyProfileRefId { get; set; }
[ForeignKey("BandyProfileRefId")]
public virtual BandyProfile.BandyProfile BandyProfile { get; set; }
}
问题 - 当我添加初始瑜伽课程并保存时,我很好,但是当我修改(删除一些并添加一些)瑜伽课程并保存时,所有旧条目都不会从表中删除。它们保留在数据库中,新条目将写入新行。
问题 - 我可以在不直接调用YogaClass表的情况下删除BandyProfile的所有旧"瑜伽课程"条目吗?我以为实体框架会看到所做的更改,并在引擎盖下做一些魔法!
_bandyProfileRepository.Save();
做一个context.SaveChanges()
这是因为您的YogaClass
对象需要使用YogaClassId
和BandyProfileRefId
创建复合主键。
从ICollection
中删除YogaClass
时,BandyProfileRefId
将为 null,这违反了主键约束并标记要删除的对象。
请参阅: 实体框架 。删除() 与 .删除对象()
数据注释:(我认为这是正确的语法)
public class YogaClass
{
[Key]
public int YogaClassId { get; set; }
public YogaStyle YogaStyle { get; set;}
[Key]
public string BandyProfileRefId { get; set; }
[ForeignKey("BandyProfileRefId")]
public virtual BandyProfile.BandyProfile BandyProfile { get; set; }
}
流利的 API:
public class MyDbContext : DbContext
{
public MyDbContext()
: base("DbContext")
{
}
public DbSet<BandyProfile> BandyProfiles { get; set; }
public DbSet<YogaClass> YogaClasses { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<YogaClass>()
.HasKey(yogaClass => new {yogaClass.YogaClassId, yogaClass.BandyProfileRefId});
base.OnModelCreating(modelBuilder);
}
}