find()メソッドを使用して1つのレコードを返します。これは、要約として表示するレコードを返します。また、viewmodelは、顧客がプロジェクトで使用したメトリックを視覚的に特定できるようにします。それらのメトリックを使用しなかった場合は、値をゼロに更新できます。メトリックを更新したら、[保存]をクリックして、これらのメトリックを表に挿入します。だから私が最初に見つけたのは、計画メトリクスのステータスが「計画済み」で、メトリックが「メトリクス」テーブルから取り込まれていたということです。これらのメトリックをページにロードすると、必要に応じてこれらのメトリックが新しい値で更新され、status = 'Actual'の新しい行として再挿入されます。エンティティエラー4.1 ObjectStateManager - オブジェクトキーマネージャに同じキーが既に存在しています
オリジナル計画メトリック記録 - METRICID = 1、metricstatus = 新実際metircsレコード 'を計画' - ノーIDを挿入する前に、metricstatus = '実際の'
私は、挿入時に次のエラーを取得します。
同じキーを持つオブジェクトがすでにObjectStateManagerに存在しています。 ObjectStateManagerは、同じキーを持つ複数のオブジェクトを追跡できません。これは、私は、レコード
IList<Metric> MetricList = new List<Metric>();
foreach (var projectMetric in ProjectMetrics){
if (projectMetric.MetricTypeId != 0)
{
var metric = new Metric
{
Value = Int32.Parse(projectMetric.Value),
MetricTypeId = projectMetric.MetricTypeId,
ProjectId = project.ProjectId,
MetricPhase = "Actual"
};
project.Metrics.Add(metric);
}
}
を挿入これは私が変更
this.Context.Projects.Attach(project);
this.Context.Entry(project).State = System.Data.EntityState.Modified;
this.Context.SaveChanges();
を保存する方法がどのようにあるすべてのヘルプは大歓迎です。
public Project GetProjectByID(int? id)
{
Project ProjectQuery = Context.Projects.Find(id);
return ProjectQuery;
}
私は実際にすべてのメトリックを持つサーバーにjson文字列を返します。私はjsonの文字列を次のように逆シリアル化します。
List InsertableProjectMetrics = JsonConvert.DeserializeObject>(metricsJSON);
次に、JasonメトリックデータをループするInsertMetricMethodを呼び出します。
public void InsertProjectMetrics(List ProjectMetrics, int projectid, ref Project project, string Status)
{
//Insert Record: Insert New Record
try
{
this.Context.Projects.Attach(project);
foreach (var projectMetric in ProjectMetrics)
{
if (projectMetric.MetricTypeId != 0)
{
var metric = new Metric
{
Value = Int32.Parse(projectMetric.Value),
MetricTypeId = projectMetric.MetricTypeId,
ProjectId = project.ProjectId,
MetricPhase = "Actual"
};
project.Metrics.Add(metric);
}
}
どのように 'project'を取得しましたか? DBから、または生のエンティティを作成しましたか? – Nix