J'utilise EF4 et j'ai créé des objets POCO avec des proxies à partir de ma structure de base de données. J'ai un POCO (objet) qui a beaucoup de relations avec d'autres entités.Comment cloner l'entité POCO et ajouter au contexte
J'ai créé une copie complète de l'objet en utilisant DataContractSerializer et BinaryFormatter et l'appelons clonedObject.
fonctionutilisé pour le clonage est:
public T CloneProxy<T>(T source)
{
var dcs = new System.Runtime.Serialization
.DataContractSerializer(typeof(T));
string filePath = "Initiative.txt";
using (FileStream file = new FileStream(filePath, FileMode.Create))
{
(new BinaryFormatter()).Serialize(file, source);
}
context.CreateProxyTypes(new Type[] { typeof(Initiative) });
using (FileStream file = new FileStream(filePath, FileMode.Open))
{
return (T)(new BinaryFormatter()).Deserialize(file);
}
}
Maintenant que j'ai clonedObject, comment puis-je ajouter au contexte? comment l'ajouter à la base de données?
mon objet (juste vous donner une idée de l'Initiative POCO):
Initiative
{
InitI
InitName
<collection>Comments
}
Comments
{
CommentI
<FK>InitI
}
Voici quelques-unes comme je l'ai fait et les erreurs que je l'ai reçu.
cloneInit.InitI = 0;
Data_Business.RQRMComment[] arr = new Data_Business.RQRMComment[1];
arr = cloneInit.RQRMComments.ToArray();
for (int x = 0; x < arr.Length; x++) //each (var x in cloneInit.RQRMComments)
{
RQRMComment thisC = arr[x];
int y = thisC.InitI;
thisC.InitI = 0;
thisC.ID = 0;
}
Context.AddObject("Initiatives", cloneInit);
Context.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);
Erreur:
ex = {"The object could not be added or attached because its EntityReference has an EntityKey property value that does not match the EntityKey for this object."}
S'il vous plaît aider, je l'ai passé trop de temps à ce sujet. Je vous remercie.
S'il vous plaît ne vont pas la route sérialisation, sauf si vous savez exactement ce que vous faites, par expérience, je sais que cela nécessite une tonnes de modifications à vous générer du code pour le faire fonctionner correctement. – leppie