2

EF4.1コードファーストでデータベースを作成しています。CoverageLevelと1対多の関係を持つテーブルMedicalPlanがあります。CoverageLevelの主キーが増加しています。MedicalPlanを作成するとき、カバレッジレベルを宣言すると、次のようにそれらのテーブルが作成されます。

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オブジェクトのコレクションであるかのように直接アクセスして、MedicalPlanおよび関連するエンティティを操作できるようになります。

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 に答える