我在EF4.1 Code First中创建了一个数据库。我有一张表,MedicalPlan,与CoverageLevel有一对多的关系。 CoverageLevel主键正在递增。当我创建MedicalPlan时,我声明了coveragelevels并创建了这些表,如下所示:
medicalPlan.CoverageLevels = new List<CoverageLevel>();
medicalPlan.CoverageLevels.Add(new CoverageLevel() { Cost = 1200, Description = "single" });
medicalPlan.CoverageLevels.Add(new CoverageLevel() { Cost = 1500, Description = "spouse" });
medicalPlan.CoverageLevels.Add(new CoverageLevel() { Cost = 1100, Description = "family" });
我还有更新功能,我会更新医疗计划。我还想要更新MedicalPlan的CoverageLevels的功能。在伪代码中,类似于:
in medicalPlan edit first item in CoverageLevels() { Cost = 1500 };
踢球者是我实际上并不想替换 CoverageLevel,因为它有一个唯一的自动递增主键,因此如果我创建一个新主键,它将具有不同的主键比原来的。有没有办法以我尝试的方式做到这一点?
答案 0 :(得分:3)
您可以在EF上下文中改变实体或相关实体,保存更改应该正确处理所有更新,而无需创建新条目:
// get EF Context
var firstCoverage = myMedicalPlan.CoverageLevels.FirstOrDefault();
if (firstCoverage != null) firstCoverage.Cost = 1500;
// save changes
答案 1 :(得分:2)
从数据库加载一个MedicalPlan之后,您应该能够使用Linq使用它和任何相关实体,或者通过MedicalPlan上的属性直接访问,就好像它是.NET对象的正常集合一样。
调用Save会保留回数据库。
E.g。
var medicalPlan = GetMedicalPlanFromDataContext(); //example method
medicalPlan.CoverageLevels.First().Cost = 1500;
//OR
medicalPlan.CoverageLevels[0].Cost = 1500
medicalPlan.Save();
或者更有可能......
var medicalPlan = GetMedicalPlanFromDataContext();
var coverage = medicalPlan.CoverageLevels.Where(x=>x.Description == "family").Single();
coverage.Cost = 1500;
medicalPlan.Save();