最初に dotConnect for MySQL でエンティティ フレームワーク コードを使用しています。
context.SaveChanges()
オブジェクトをコンテキストに追加した後に呼び出すと、次のエラーが発生します。
DbUpdateException :
エントリの更新中にエラーが発生しました。詳細については、内部例外を参照してください。内部例外:
UpdateException: エントリの更新中にエラーが発生しました。詳細については、内部例外を参照してください。内部例外: EntityCommandCompilationException: コマンド定義の準備中にエラーが発生しました。詳細については、内部例外を参照してください。"}
内部例外:
NotSupportedException: {"空の挿入ステートメント。"}
DbContext
に項目を追加した後に を保存するときDbContext
奇妙な部分は、すべてのコンテンツを追加すると正常に追加されましたが、オブジェクト自体を追加するとこのエラーが発生することです。
このコード行は失敗します:
context.TournamentTables.Add(tournamentTable);
これは完全に機能しますが:
tournamentTable.Columns.ForEach(column =>
{
column.Cells.ForEach((cell) => context.TournamentCells.Add(cell));
context.TournamentColumns.Add(column);
});
追加しようとしているオブジェクトは次のとおりです。
public class TournamentTable //: IEnumerable<TournamentColumn>
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int? Id { get; set; }
public List<TournamentColumn> Columns { get; set; }
public TournamentTable()
{
Columns = new List<TournamentColumn>();
}
public void AddColumn(int index, TournamentColumn column)
{
Columns.Insert(index, column);
}
public void RemoveColumn(int index)
{
Columns.RemoveAt(index);
}
/// <summary>
/// Add a tournament cell at the top of the column.
/// </summary>
/// <param name="column"></param>
public void AddColumn(TournamentColumn column)
{
Columns.Add(column);
}
/// <summary>
/// Returns the tournament column at the index specified.
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
[NotMapped]
public TournamentColumn this[int index]
{
get { return Columns[index]; }
}
/// <summary>
/// Returns the tournament cell at the index specified.
/// </summary>
/// <param name="columnIndex"></param>
/// <param name="cellIndex"></param>
/// <returns></returns>
[NotMapped]
public TournamentCell this[int columnIndex, int cellIndex]
{
get { return Columns[columnIndex][cellIndex]; }
set
{
Columns[columnIndex][cellIndex] = value;
}
}
}
トーナメント テーブル ID はデフォルトで 0 であり、ID が「int?」として宣言されている場合は注意してください。それよりもnullになります。私は両方のケースを試し、自分でIDを設定しましたが、それでも失敗します。