Я просто загружаю страницу, используя метод find (), который возвращает одну запись для отображения в виде сводки, а моя viewmodel также возвращает список того, что я называю метриками, чтобы клиент мог визуально идентифицировать метрики, которые он использовал для проекта.Если они не использовали эти метрики, они могут обновить значение до нуля.Как только они обновляют метрики, они нажимают сохранить, чтобы вставить эти метрики в таблицу.Итак, мы находим, что у меня изначально были метрики, извлеченные из таблицы метрик со статусом «Запланировано» для плановых метрик.Когда они загружают эти метрики на страницу, эти метрики будут обновляться, если необходимо, новыми значениями, а затем повторно вставляться в виде новых строк со статусом = «Фактический».
Исходная плановая запись метрики - metricid = 1, metricstatus = 'Запланированная' Новая фактическая запись метрик - нет идентификатора перед вставкой, 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);
Затем я вызываю InsertMetricMethod, который просматривает данные метрики Jason.
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);
}
}