J'essaie d'insérer des données en vrac, base de données est la connexion MySQL est faite en utilisant Devart LinqConnect. Voici un code:C# Linq "Entité avec la même clé '0' déjà ajoutée." lors de l'insertion de plusieurs lignes
DataContext db = new DataContext();
List<XYData> XYDList = new List<XYData>(); // Data Type
List<xydata> xyToBeInsrted = new List<xydata>(); // Database table
XYDList = XYData.genXYData(12, 1234); // Generates 12 example records
foreach (XYData oneXY in XYDList)
{
// Create clear row representation
xydata xy_row = new xydata();
// Assign data from object
xy_row.id = oneXY.Id;
xy_row.Batchid = (int)oneXY.BatchId;
xy_row.Ch = oneXY.Channel;
xy_row.Value = oneXY.Value;
xy_row.Pos = (int)oneXY.Position;
xy_row.Dtm = oneXY.Time;
// Add to list of rows to be inserted
xyToBeInsrted.Add(xy_row);
}
db.xydatas.InsertAllOnSubmit<xydata>(xyToBeInsrted);
db.SubmitChanges();
La dernière ligne donne une erreur « entité avec la même clé « 0 » déjà ajouté. » Lorsque j'abaisse le nombre d'éléments à générer à 1 alors cela fonctionne. Tout ce qui est au-dessus de 1 donne une erreur.
Le tableau a défini l'incrément automatique sur le champ Identifiant d'enregistrement.
Essayer de résoudre cela pendant 2 heures sans succès.
EDIT: données Classe:
public class XYData
{
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int Id { get; set; }
public int BatchId { get; set; }
public int Channel { get; set; }
public String Value { get; set; }
public double Position { get; set; }
public DateTime Time { get; set; }
private static Random rand = new Random();
public XYData(int channel = 0, string val = "")
{
Channel = channel;
Value = val;
Position = 0;
Time = DateTime.Now;
}
public static List<XYData> genXYData(int howMany, int batchId)
{
List<XYData> _allXYData = new List<XYData>();
for (int i = 0; i < howMany; i++)
{
XYData _singleXY = new XYData();
_singleXY.BatchId = batchId;
for (int j = 64 * (1 << i); j > 0; j--)
{
uint k = (uint)rand.Next(int.MaxValue);
_singleXY.Value += k.ToString("X8");
}
_allXYData.Add(_singleXY); // Add to list
}
return _allXYData; // Return list of generated data.
}
}
On dirait que vous essayez d'entrer des données avec le même valeur dans la clé primaire, qui doit être unique. Quelle est la valeur de votre clé primaire? Si c'est BatchID, BatchID devrait être un Guid, pas un int, pour assurer l'unicité de la valeur. Vous pouvez également publier le contenu de genXYData, car il y a probablement un problème avec les valeurs d'échantillon que vous écrivez. – IllusiveBrian
La clé primaire dans la base de données est Id, BatchID est une clé étrangère à l'autre table. N'a pas créé une telle variable même si je suppose qu'il est créé automatiquement ou ai-je tort? – PawelW
Pouvez-vous montrer la définition de XYData s'il vous plaît. – evilbhonda