だから私はこのモデルhttp://i.imgur.com/tz8ZVPT.pngを持っていて、プログラムで更新を作成したいので、最初に更新を作成し、必要なすべての項目を入力し、MachineType を見つけて、おそらくプログラムですが、何も見つからない場合は、MachineType から最初のプログラムを取得します。注: すべての MachineType には、少なくとも 1 つのプログラムがあります。
for (int i = 0; i < dgvInput.Rows.Count; i++)
{
DataGridViewRow row = dgvInput.Rows[i];
int machineTypeId = Convert.ToInt32(row.Cells[1].Value);
Update update = new Update();
update.MachineType.Add(Check.prombase.MachineTypes.First(mt => mt.MachineTypeId == machineTypeId));
foreach (Program program in database.Programs)
{
if (program.ProgramVersion.Split('v')[0] == row.Cells[5].Value.ToString())
{ //If a program is added here, it will save it
update.Program.Add(program);
break;
}
}
if (update.Program.Count == 0)
foreach (Program program in database.Programs)
{ //When a program is added here, it will NOT save it
if (program.MachineType.MachineTypeId == machineTypeId)
{
update.Program.Add(program);
break; //When debugging it comes here everytime
}
}
//Here it is always: update.Program.Count = 1
database.AddToUpdates(update);
database.SaveChanges();
if (update.MachineType.Count == 0 || update.Program.Count == 0)
MessageBox.Show("This error is nevers shown!");
}
問題は、常にプログラムがあると言っていますが、実際にはそうではないことです。アップデートにプログラムが追加されないのは、何が悪いのですか?
edit VARAK: コードを置き換えた後も保存されません。これも最後に追加しました
reloadDatabase();
foreach(Update update in database.Updates)
if (update.Program.Count == 0)
MessageBox.Show("This can't be happening");