Entity FrameWork 2010 [Résolu]

cs_eyango 45 Messages postés jeudi 24 août 2006Date d'inscription 30 janvier 2014 Dernière intervention - 6 sept. 2012 à 09:27 - Dernière réponse : cs_eyango 45 Messages postés jeudi 24 août 2006Date d'inscription 30 janvier 2014 Dernière intervention
- 10 sept. 2012 à 13:00
Bonjour chers Tous,
je débute sous la plateforme Visual Studio 2010. et je developpe une appli web...
je souhaite importer dans ma base SQL SERVER un fichier de données Excel 2007:
l'erreur suivant est générée:
"The EntityKey property can only be set when the current value of the property is null."

voici mon code:

protected void ImporterButton_Click(object sender, EventArgs e)
{
ServiceCotisation SC = new ServiceCotisation();
DataAccessEF.Cotisation DaC = new DataAccessEF.Cotisation();
OleDbConnection conExcel = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\MURCAS;Extended Properties=""Excel 12.0 Xml;HDR=YES"";");
SqlConnection conSQL = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Bayard Joel\Documents\visual studio 2010\Projects\MurcasFasas2012\Presentation\App_Data\DatabaseMurcasFasas2012.mdf;Integrated Security=True;User Instance=True");
OleDbDataAdapter Da = new OleDbDataAdapter();
DataSet Ds = new DataSet();
OleDbCommand comm = new OleDbCommand("SELECT * FROM [RH$]", conExcel);
Da.SelectCommand = comm;
Da.Fill(Ds, "RH");
conSQL.Open();

DateTime DT = new DateTime();
DT = Calendar1.SelectedDate;

int nCount = 0;
foreach (DataRow row in Ds.Tables["RH"].Rows)
{
DaC.Matricule = Convert.ToString(row[0]);
DaC.Section = Convert.ToString(row[1]);
DaC.CodeUnite = Convert.ToString(row[2]);
DaC.LibelleUnite = Convert.ToString(row[3]);
DaC.CSRH = Convert.ToInt32(row[4]);
DaC.Ville = Convert.ToString(row[5]);
DaC.CotisationMurcas = Convert.ToInt32(row[6]);
DaC.ReversementMurcas = Convert.ToInt32(row[7]);
DaC.RappelMurcas = Convert.ToInt32(row[8]);
DaC.CotisationFasas = Convert.ToInt32(row[9]);
DaC.ReversementFasas = Convert.ToInt32(row[10]);
DaC.RappelFasas = Convert.ToInt32(row[11]);
DaC.TotalMurcas = Convert.ToInt32(row[12]);
DaC.TotalFasas = Convert.ToInt32(row[13]);
SC.AjouterCotisation(DaC);
conSQL.Close();
nCount++;
}

la classe qui définit la méthode AjouterCotisation:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataAccessEF;
using System.Data.Entity;

namespace BLL
{
public class ServiceCotisation
{
public void AjouterCotisation(Cotisation C)
{
using (MyDatabaseEntities1 MD = new MyDatabaseEntities1())
{
MD.AddToCotisation(C);
MD.SaveChanges();
}
}
}
}

la ligne qui génère l'erreur se trouve dans le "Model1.edmx":
public void AddToCotisation(Cotisation cotisation)
{
base.AddObject("Cotisation", cotisation);
}


Merci de me répondre
cordialement
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
fohaf 60 Messages postés vendredi 14 novembre 2003Date d'inscription 6 septembre 2012 Dernière intervention - 6 sept. 2012 à 10:47
3
Merci
Bonjour,

en regardant vite fait ton code (pense à utiliser la coloration syntaxique, il sera plus facile à lire), il me semble que tu essayes d'ajouter plusieurs fois le même objet Cotisation et tu as un conflit de clé primaire.
Essaye en créant ton objet cotisation dans ta boucle foreach:

foreach (DataRow row in Ds.Tables["RH"].Rows)
{
DataAccessEF.Cotisation DaC = new DataAccessEF.Cotisation(); 
DaC.Matricule = Convert.ToString(row[0]);
...
SC.AjouterCotisation(DaC);
...
}

Merci fohaf 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 125 internautes ce mois-ci

Commenter la réponse de fohaf
cs_eyango 45 Messages postés jeudi 24 août 2006Date d'inscription 30 janvier 2014 Dernière intervention - 6 sept. 2012 à 11:07
0
Merci
Désolé pour la coloration syntaxique
Commenter la réponse de cs_eyango
cs_L0ci 224 Messages postés vendredi 26 novembre 2010Date d'inscription 11 juin 2013 Dernière intervention - 6 sept. 2012 à 11:07
0
Merci
Bonjour,

Si tu copies une entité existante tu peux utiliser:
MD.ObjectStateManager.ChangeObjectState(C, EntityState.Added);
Commenter la réponse de cs_L0ci
cs_eyango 45 Messages postés jeudi 24 août 2006Date d'inscription 30 janvier 2014 Dernière intervention - 10 sept. 2012 à 13:00
0
Merci
Salut fohaf j'ai encore un souci avec ce mm code voici la ligne qui cause le problÚme:

OleDbConnection conExcel = new
OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\MURCAS;Extended Properties=""Excel 12.0 Xml;HDR=YES"";");

je souhaiterais grace à un 'fileuplaod' choisir un fichier sur mon disque et renseigner le nom du fichier dans la chaine de connexion... mais lorsque je l applique comme suit:
OleDbConnection conExcel = new
OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:"+FileUpload1.FileName+";Extended Properties=Excel 12.0 Xml;HDR=YES;");

je reçois une erreur suivante: "Could not find installable ISAM."

Merci de me répondre...
Commenter la réponse de cs_eyango

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.