编辑列表<objects>中的对象而不创建该对象的新实例?</objects>

时间:2012-07-23 17:22:08

标签: c#

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

2 个答案:

答案 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();