Comment puis-je joindre un objet Entity Framework qui n'est pas à partir de la base de données?

J'ai une séparation complète de mon Entity Framework objets et mes objets POCO, je viens de les traduire en arrière et en avant...

je.e:

//poco
public class Author
{
   public Guid Id { get; set; }
   public string UserName { get; set; }
}

et puis j'ai un EF objet "Auteurs", avec les mêmes propriétés..

Donc, j'ai mon objet métier

var author = new Author { UserName="foo", Id="Guid thats in the db" };

et je veux sauver cet objet donc je ne les suivants:

var dbAuthor = new dbAuthor { Id=author.Id, UserName=author.UserName };
entities.Attach(dbAuthor);
entities.SaveChanges();

mais cela me donne l'erreur suivante:

Un objet avec une valeur null EntityKey valeur
ne peut pas être attachée à un objet
contexte.

EDIT:
Il semble que j'ai à utiliser les entités.AttachTo (les"Auteurs", dbAuthor); pour attacher sans EntityKey, mais ensuite j'ai codé en dur de la magie des cordes, ce qui va casser si je change mon entité noms de jeux à tous et j'ai l'habitude ont à tout moment de la compilation, la vérification... Est-il un moyen pour que je puisse le joindre conserve moment de la compilation, la vérification?

J'espère que je serais capable de le faire, que les chaînes codées en dur tuant moment de la compilation validation sucer =)

  • Avez-vous cherché à le modifier à ma réponse, il va vous permettre de le faire sans la magie des cordes ou AttachTo que les méthodes sont généré par le concepteur et maintenu par le modèle edmx.
  • Oui, je ne suis pas de l'ajouter, je suis à jour, j'ai donc besoin de s'attacher à elle, et enregistrer les modifications
  • Je crois toujours que votre modèle a un problème avec l'Id de propriété sur les Auteurs de l'objet n'étant pas défini comme EntityKey, vous devriez vérifier le code XML généré et assurez-vous qu'il est imbriqué dans un élément clé et assurez-vous que l'Id de propriété a l'attribut EdmScalarPropertyAttribute(EntityKeyProperty=true)
  • Il a: <EntityType Name="tblAuthors"> <Key> <PropertyRef Name="Id" /> </Key> mais il n'y a pas de quoi à propos de EdmScalarPropertyAttribute
  • Le EdmScalarPropertyAttribute serait appliqué à l'Id de la propriété à l'intérieur de la designer.cs fichier pour le modèle. Il doit certainement avoir l'attribut, mais je pense que le EntityKeyProperty paramètre ne peut pas être spécifié.
  • Il a: [global::System.Les données.Objets.DataClasses.EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]

InformationsquelleAutor sontek | 2009-03-31