Je suis en train de réaliser les objectifs suivants en utilisant le framework 4.0 Entité et entités autovirants:Comment créer et stocker un objet entité (auto-suivi) côté serveur?
1) La demande d'application client un livre forment le serveur en fournissant un numéro ISBN
2) Le serveur effectue une requête sur sa base de données pour voir si le livre est déjà présent
3a) Si le livre est dans la base de données, il le retourne.
3b) Si le livre est pas dans la base de données, il questionnera Amazon pour plus d'informations, extraire les attributs requis, créez un nouveau livre, la stocker dans la base de données, et le retourner au client
Maintenant, 3b) est où les problèmes sont ... Je ne trouve pas d'informations sur la façon dont je peux créer un objet entité (un livre) sur le côté serveur, l'ajouter au contexte et le stocker dans la base de données. J'ai essayé toutes sortes de choses:
public class BookBrowserService : IBookBrowserService {
public Book GetBook(string ISBN) {
using (var ctx = new BookBrowserModelContainer()) {
Book book = ctx.Books.Where(b => b.ISBN == ISBN).SingleOrDefault();
if (book == null) {
book = new Book();
book.ISBN = ISBN; // This is the key
book.Title = "This title would be retrieved from Amazon";
Author author = new Author();
author.Name = "The author's name would be retrieved from Amazon";
book.Authors.Add(author);
ctx.Books.AddObject(book);
ctx.SaveChanges(); // This one always throws an exception...
}
return book;
}
}
}
Quelqu'un pourrait-il me dire ce que je fais mal? Il semblerait que le problème soit lié au modèle EDMX. J'ai une entité Livre et une entité Auteur, avec une relation plusieurs-à-plusieurs.
La clé de l'entité Livre est ISBN, qui est une chaîne de longueur maximale 13. StoreGeneratedPattern est défini sur None.
La clé de l'entité Auteur est Id, qui est un Guid. StoreGeneratedPattern est l'identité.
Le message d'exception est: "Impossible d'insérer la valeur NULL dans la colonne 'Id', table 'BookBrowser.dbo.Authors'; colonne ne permet pas les valeurs NULL échoue INSERT L'instruction a été interrompue..."
Mais étant donné que StoreGeneratedPattern est défini sur Identité, une valeur Id ne doit-elle pas être créée automatiquement?
Merci, Peter
En fait, le serveur peut générer des ID avec StoreGeneratedPattern = Identity. Dans un projet plus ancien qui est db-first, cela fonctionne très bien. Mais dans mon projet actuel qui est le code-premier, j'ai le même problème. – HiredMind