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)即可。