我正在尝试同时更新数据库中的两个对象。使用我目前的代码,它似乎只是更新我的导航属性。例如,如果"得分"在我的第一堂课中,它不会更新。但是如果第二类中的任何内容发生变化,它将会正确更新。我不确定我在这里做错了什么。这是代码优先的实体框架。
我有两个班级:
public class SampleClass
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int TestId { get; set; }
public string Items { get; set; }
public int Score { get; set; }
public IList<Test> Test { get; set; }
}
另一个看起来像这样的课程:
public class Test
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TestId { get; set; }
public double RawScore { get; set; }
public double PercentScore { get; set; }
public int SampleClassId { get; set; }
[ForeignKey("SampleClassId")]
public virtual SampleClass SampleClass { get; set; }
}
要在数据库中更新我有:
var entry = context.Entry(sampleFormClass);
entry.State = System.Data.Entity.EntityState.Modified;
entry.Property(e => e.Items).IsModified = false;
foreach (var navigationProperty in myTestClass.Test)
{
var entityEntry = context.Entry(navigationProperty);
entityEntry.State = System.Data.Entity.EntityState.Modified;
entityEntry.Property(navProp => navProp.SampleClassId).IsModified = false;
}
context.FormData.Attach(sampleFormClass);
}
context.SaveChanges();
如果我在我的方法中删除了foreach以更新对象,那么它将不会更新我的nav属性。如何同时更新我的对象及其对象列表?
解决我的问题
修改:我可以通过重新安排更新方法中的代码来解决自己的问题:
context.FormData.Attach(sampleFormClass);
var entry = context.Entry(sampleFormClass);
entry.State = System.Data.Entity.EntityState.Modified;
entry.Property(e => e.Items).IsModified = false;
foreach (var navigationProperty in myTestClass.Test)
{
var entityEntry = context.Entry(navigationProperty);
entityEntry.State = System.Data.Entity.EntityState.Modified;
entityEntry.Property(navProp => navProp.SampleClassId).IsModified = false;
}
}
context.SaveChanges();
我刚刚移动了您要更新的对象所在的行。
答案 0 :(得分:0)
我能够通过将更新方法中的代码重新排列到此来解决我自己的问题:
context.FormData.Attach(sampleFormClass);
var entry = context.Entry(sampleFormClass);
entry.State = System.Data.Entity.EntityState.Modified;
entry.Property(e => e.Items).IsModified = false;
foreach (var navigationProperty in myTestClass.Test)
{
var entityEntry = context.Entry(navigationProperty);
entityEntry.State = System.Data.Entity.EntityState.Modified;
entityEntry.Property(navProp => navProp.SampleClassId).IsModified = false;
}
}
context.SaveChanges();
我刚刚移动了您要更新的对象所在的行。