2

我在 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,因为它具有唯一的自动递增主键,所以如果我创建一个新主键,它将具有与原始主键不同的主键。有没有办法以我尝试的方式做到这一点?

4

2 回答 2

3

您可以在 EF 上下文中改变实体或相关实体,并且保存更改应该为您正确处理所有更新,而无需创建新条目:

// get EF Context
var firstCoverage = myMedicalPlan.CoverageLevels.FirstOrDefault();
if (firstCoverage != null) firstCoverage.Cost = 1500;
// save changes
于 2012-07-23T17:25:47.763 回答
2

从数据库中加载 MedicalPlan 后,您应该能够使用 Linq 使用它和任何相关实体,或者通过 MedicalPlan 上的属性直接访问,就好像它是 .NET 对象的正常集合一样。

调用 Save 将持久化回数据库。

例如

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();
于 2012-07-23T17:27:47.797 回答