Un peu plus facile solution serait de mettre en œuvre l'interface ICloneable
sur l'entité que vous souhaitez travailler comme ça. Ensuite, tout ce que vous avez à faire est d'appeler Clone() dans l'entité 'originale' que vous avez extraite de la base de données.
Exemple:
class Product : ICloneable
{
public virtual int Id { get; private set; }
public virtual string Name { get; set; }
public object Clone()
{
return new Product() { Id=this.Id, Name=this.Name };
}
}
Et tout ce que vous devez faire est:
Datacontext db = new Datacontext(); // replace with your DataContext
Product originalProduct =
db.Products.Single(p => p.Id == 2); // get product with Id 2
db.originalProduct = p.Clone()
db.SubmitChanges();
Edit: je suis tombé sur le même problème au travail, jusqu'à la solution la plus élégant trouvé était de construire une méthode d'extension qui reçoit l'entité nouvellement créée, dans votre cas Product
, et copie ses propriétés (à l'exception de l'identificateur) à l'entité que vous avez extrait du DataContext.
J'ai copié toutes les propriétés via Reflection, de cette façon, si je mets à jour l'entité, alors ma méthode d'extension fonctionnera toujours.
Espérons que cela vous aide aussi.
Si vous trouvez une solution plus élégante à ce problème, je voudrais entendre :)
Cela devrait certainement travailler mais pourrait être douloureux pour copier toujours sur les propriétés. Dans NHibernate, ils ont une construction appelée Reattach qui vous permet de spécifier qu'il s'agit d'un objet existant dans la base de données. Je ne suis pas sûr que L2S l'ait ou non. –
bien sûr, mais op utilise L2S –