Bug #67612 Unable to add new entity with context.saveChanges() method.
Submitted: 16 Nov 2012 14:34 Modified: 20 Nov 2012 16:20
Reporter: Marco Majerna Email Updates:
Status: Not a Bug Impact on me:
None 
Category:Connector / NET Severity:S3 (Non-critical)
Version:6.6.4.0 OS:Windows (7 x64 and Server 2008)
Assigned to: CPU Architecture:Any
Tags: MySql.Data.MySqlClient.MySqlException

[16 Nov 2012 14:34] Marco Majerna
Description:
MySql.Data.MySqlClient.MySqlException
       Message=You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT
  idUtente,
  idAVPiano,
  idAvvisoPiano,
  idAvviso,
  dataInserimento,' at line 1
       Source=MySql.Data
       ErrorCode=-2147467259
       Number=1064
       StackTrace:
            in MySql.Data.MySqlClient.MySqlStream.ReadPacket()
            in MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)
            in MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId)
            in MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
            in MySql.Data.MySqlClient.MySqlDataReader.NextResult()
            in MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
            in MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
            in MySql.Data.Entity.EFMySqlCommand.ExecuteNonQuery()
            in System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
            in System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
       InnerException: 

I try to using the EF 6.6.4.0 with MySql 5.5.17 and when i try to save changes (add new entity) send an exception.

this is a part of the sample code:
var avvisoPiano = new avviso_piano_c();
// è nuovo
avvisoPiano.idAVPiano = 1;
avvisoPiano.idAvvisoPiano = "12";
avvisoPiano.idAvviso = "1";
avvisoPiano.idUtente = 1;
avvisoPiano.dataInserimento = DateTime.Now;
{...}

using (var context = new avvisoprogettoquadro2012Entities())
{
    context.avviso_piano_c.AddObject(avvisoPiano);
    //context.AddToavviso_piano_c(piano);
    //context.ObjectStateManager.ChangeObjectState(avvisoPiano, EntityState.Added);
    context.SaveChanges();
}

and this is the connection string in App.Config file

<add name="avvisoprogettoquadro2012Entities" connectionString="metadata=res://*/test.csdl|res://*/test.ssdl|res://*/test.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=192.168.1.22;User Id=yyyyy;password=xxxxx;Persist Security Info=True;database=avvisoprogettoquadro2012&quot;" providerName="System.Data.EntityClient" />

How to repeat:
Create table:

*DDL Information*/
-------------------

CREATE TABLE `avviso_piano_c` (
  `idUtente` int(11) NOT NULL,
  `idAVPiano` int(11) NOT NULL DEFAULT '0',
  `idAvvisoPiano` varchar(11) NOT NULL,
  `idAvviso` varchar(11) NOT NULL,
  `dataInserimento` datetime DEFAULT '9999-12-31 23:59:00',
  `dataUltimaVariazione` datetime DEFAULT '9999-12-31 23:59:00',
  `presentato` char(1) DEFAULT 'N',
  `dataPresentazione` datetime DEFAULT '9999-12-31 23:59:00',
  `approvato` char(1) DEFAULT 'N',
  `dataApprovazione` datetime DEFAULT '9999-12-31 23:59:00',
  `gestito` char(1) DEFAULT 'N' COMMENT 'monitoraggio fisico - chiusura periodo gestione',
  `dataChiusiraGestione` datetime DEFAULT '9999-12-31 23:59:00',
  `rendicontato` char(1) DEFAULT 'N' COMMENT 'monitoraggio finanziario - chiusura periodo rendicontazione',
  `dataChiusuraRendicontazione` datetime DEFAULT '9999-12-31 23:59:00',
  `validato` char(1) DEFAULT 'N' COMMENT 'Validato dal fondo se serve',
  `dataValidazioneDaFondo` datetime DEFAULT '9999-12-31 23:59:00',
  `titolo` varchar(4000) DEFAULT NULL,
  `tipologia_aziendale` char(1) DEFAULT 'N',
  `tipologia_interaziendale` char(1) DEFAULT 'N' COMMENT 'aziendale, InterAziendale',
  `tipologia_settoriale` char(1) DEFAULT 'N',
  `tipologia_territoriale` char(1) DEFAULT 'N',
  `tipologia_individuale` char(1) DEFAULT 'N' COMMENT 'usato per FILIERA',
  `regione_valle_aosta` char(1) DEFAULT 'N',
  `regione_piemonte` char(1) DEFAULT 'N',
  `regione_lombardia` char(1) DEFAULT 'N',
  `regione_trentino_alto_adige` char(1) DEFAULT 'N',
  `regione_veneto` char(1) DEFAULT 'N',
  `regione_friuli_venezia_giulia` char(1) DEFAULT 'N',
  `regione_liguria` char(1) DEFAULT 'N',
  `regione_emilia_romagna` char(1) DEFAULT 'N',
  `regione_toscana` char(1) DEFAULT 'N',
  `regione_umbria` char(1) DEFAULT 'N',
  `regione_marche` char(1) DEFAULT 'N',
  `regione_lazio` char(1) DEFAULT 'N',
  `regione_abruzzo` char(1) DEFAULT 'N',
  `regione_molise` char(1) DEFAULT 'N',
  `regione_campania` char(1) DEFAULT 'N',
  `regione_basilicata` char(1) DEFAULT 'N',
  `regione_puglia` char(1) DEFAULT 'N',
  `regione_calabria` char(1) DEFAULT 'N',
  `regione_sicilia` char(1) DEFAULT 'N',
  `regione_sardegna` char(1) DEFAULT 'N',
  `tipol_accordo_sind_RSU` char(1) DEFAULT 'N',
  `tipol_accordo_sind_RSA` char(1) DEFAULT 'N',
  `tipol_accordo_sind_Terr` char(1) DEFAULT 'N',
  `tipol_accordo_sind_Sett` char(1) DEFAULT 'N',
  `tipol_accordo_sind_Naz` char(1) DEFAULT 'S',
  `tipol_accordo_impr_Impresa` char(1) DEFAULT 'N',
  `tipol_accordo_impr_Terr` char(1) DEFAULT 'N',
  `tipol_accordo_impr_Sett` char(1) DEFAULT 'N',
  `tipol_accordo_impr_Naz` char(1) DEFAULT 'S',
  `presentazione_aperta_da_fondo` char(1) DEFAULT 'N',
  `data_presentazione_aperta_da_fondo` datetime DEFAULT '9999-12-31 23:59:00',
  `gestione_aperta_da_fondo` char(1) DEFAULT 'N',
  `data_gestione_aperta_da_fondo` datetime DEFAULT '9999-12-31 23:59:00',
  `rendicontazione_aperta_da_fondo` char(1) DEFAULT 'N',
  `data_rendicontazione_aperta_da_fondo` datetime DEFAULT '9999-12-31 23:59:00',
  `richiesta_intesa_attiva` char(1) DEFAULT 'N' COMMENT 'N o S',
  `data_richiesta_intesa_attiva` datetime DEFAULT '9999-12-31 23:59:00',
  `cpps_esito_rilascio_intesa` varchar(255) DEFAULT NULL,
  `data_cpps_esito_rilascio_intesa` datetime DEFAULT '9999-12-31 23:59:00',
  `cpps_eventuali_note` varchar(4000) DEFAULT NULL,
  `soggetto_gestore_singolo_ats` char(1) DEFAULT 'S' COMMENT 'S o A'
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Create a new winform project and add a button on the Form.

Add e ado.net data entity named "test.emdx"

This is the C# code in Form1.cs:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace testEF
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void simpleButton1_Click(object sender, EventArgs e)
        {
            var avvisoPiano = new avviso_piano_c();
            // è nuovo
            avvisoPiano.idAVPiano = 1;
            avvisoPiano.idAvvisoPiano = "12";
            avvisoPiano.idAvviso = "1";
            avvisoPiano.idUtente = 1;
            avvisoPiano.dataInserimento = DateTime.Now;

            avvisoPiano.presentato = "N";
            avvisoPiano.dataPresentazione = DateTime.Now;
            avvisoPiano.approvato = "N";
            avvisoPiano.dataApprovazione = DateTime.Now;
            avvisoPiano.gestito = "N";
            avvisoPiano.dataChiusiraGestione = DateTime.Now;
            avvisoPiano.rendicontato = "N";
            avvisoPiano.dataChiusuraRendicontazione = DateTime.Now;
            avvisoPiano.validato = "N";
            avvisoPiano.dataValidazioneDaFondo = DateTime.Now;
            avvisoPiano.gestione_aperta_da_fondo = "N";
            avvisoPiano.presentazione_aperta_da_fondo = "N";
            avvisoPiano.rendicontazione_aperta_da_fondo = "N";
            avvisoPiano.data_gestione_aperta_da_fondo = DateTime.Now;
            avvisoPiano.data_presentazione_aperta_da_fondo = DateTime.Now;
            avvisoPiano.data_rendicontazione_aperta_da_fondo = DateTime.Now;
            avvisoPiano.tipologia_individuale = "N";
            avvisoPiano.tipologia_settoriale = "N";
            avvisoPiano.tipologia_territoriale = "N";

            avvisoPiano.tipol_accordo_sind_RSU = "N";
            avvisoPiano.tipol_accordo_sind_RSA = "N";
            avvisoPiano.tipol_accordo_sind_Terr = "N";
            avvisoPiano.tipol_accordo_sind_Sett = "N";
            avvisoPiano.tipol_accordo_sind_Naz = "S"; // default

            avvisoPiano.tipol_accordo_impr_Impresa = "N";
            avvisoPiano.tipol_accordo_impr_Terr = "N";
            avvisoPiano.tipol_accordo_impr_Sett = "N";
            avvisoPiano.tipol_accordo_impr_Naz = "S";// default

            avvisoPiano.data_richiesta_intesa_attiva = DateTime.Now;

            avvisoPiano.richiesta_intesa_attiva = "N";
            avvisoPiano.cpps_esito_rilascio_intesa = "";
            avvisoPiano.data_cpps_esito_rilascio_intesa = DateTime.Now;
            avvisoPiano.cpps_eventuali_note = "";

            avvisoPiano.regione_abruzzo = "N";
            avvisoPiano.regione_basilicata = "N";
            avvisoPiano.regione_calabria = "N";
            avvisoPiano.regione_campania = "N";
            avvisoPiano.regione_emilia_romagna = "N";
            avvisoPiano.regione_friuli_venezia_giulia = "N";
            avvisoPiano.regione_lazio = "N";
            avvisoPiano.regione_liguria = "N";
            avvisoPiano.regione_lombardia = "S"; // default
            avvisoPiano.regione_marche = "N";
            avvisoPiano.regione_molise = "N";
            avvisoPiano.regione_piemonte = "N";
            avvisoPiano.regione_puglia = "N";
            avvisoPiano.regione_sardegna = "N";
            avvisoPiano.regione_sicilia = "N";
            avvisoPiano.regione_toscana = "N";
            avvisoPiano.regione_trentino_alto_adige = "N";
            avvisoPiano.regione_umbria = "N";
            avvisoPiano.regione_valle_aosta = "N";
            avvisoPiano.regione_veneto = "N";

            avvisoPiano.dataUltimaVariazione = DateTime.Now;

            avvisoPiano.titolo = "titolo";
            avvisoPiano.tipologia_settoriale = "N";
            avvisoPiano.tipologia_individuale = "N";
            avvisoPiano.tipologia_territoriale = "S";

            using (var context = new avvisoprogettoquadro2012Entities())
            {
                context.avviso_piano_c.AddObject(avvisoPiano);
                //context.AddToavviso_piano_c(piano);
                //context.ObjectStateManager.ChangeObjectState(avvisoPiano, EntityState.Added);
                context.SaveChanges();
            }
        }
    }
}
[16 Nov 2012 15:27] Marco Majerna
I resolved the problem. 
The emdx create the primary key but someone didn't assign a table primary key.
After add the table key the method goes on.

Thank you
[20 Nov 2012 16:20] Fernando Gonzalez.Sanchez
Yes, you need explicit PKs in your tables with Entity Framework.
[17 Nov 2014 19:58] Ibrahim Islam
PK was the main reason