0

我首先使用實體​​框架代碼和dotConnect for MySQL。實體框架「空插入語句」

我收到以下錯誤,當我打電話context.SaveChanges()添加對象上下文後:

DbUpdateException
在更新條目中出現了錯誤。詳情請參閱內部例外。

內部異常:
UpdateException:更新條目時發生錯誤。詳情請參閱內部例外。

內部異常: EntityCommandCompilationException:準備命令定義時發生錯誤。詳情請參閱內部異常 「}

內部異常:
NotSupportedException異常:{」。空INSERT語句「}

保存 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,但仍然失敗。

回答

0

我想你是以錯誤的方式添加列。

基本上,你不需要這樣的:

tournamentTable.Columns.ForEach(column => 
{ 
    column.Cells.ForEach((cell) => context.TournamentCells.Add(cell)); 
    context.TournamentColumns.Add(column); 
}); 

實體框架會替你。將所有列添加到聯賽表後,只需要撥打context.TournamentTables.Add(tournamentTable)即可。