2010-10-03 9 views
0

J'ai plusieurs tables qui sont toutes liées à une table centrale avec des clés étrangères. Je veux être en mesure de créer un nouvel enregistrement dans le tableau 2, mais j'ai des problèmes car je ne sais pas comment créer une nouvelle instance de l'enregistrement de la table 2 en référençant l'ID de l'enregistrement auquel il sera lié.ASP.net MVC créer un enregistrement de table avec clé étrangère

Exemple:

Base de données: Collection

Tableau: Collection Champ 1: id Champ 2: nom

Tableau: Livre Champ 1: CollectionID Champ 2: id Champ 3 : nom

Maintenant, je ne veux pas être en mesure de créer un livre sans définir son ID de collection, mais je ne peux pas fig Existez-vous comment cela devrait être divisé dans les contrôleurs/vues.

Est-ce que Book doit avoir un contrôleur distinct de Collection ou doit-il avoir une méthode createBook, séparée de sa propre méthode create?

Je souhaite appeler la méthode createBook (à partir de son propre contrôleur ou du contrôleur de collection) à partir de la vue Détails de la collection.

Lorsque j'appelle la méthode create de Book, comment créer un nouveau livre instancié avec l'ensemble collectionId à partir de la vue détaillée de l'élément Collection répertorié dans la vue détaillée?

Je dois préciser que j'utilise le framework d'entité pour mon modèle, et je suis définitivement nouveau dans ce domaine.

Merci pour toute aide

Répondre

1

Essayez de ne pas créer/contrôleurs distincts en fonction de votre modèle d'entité, créer/les séparer en fonction des routes de l'interface utilisateur et URL.

Je suppose que vous avez une vue appelée "CreateBook", qui est (espérons-le) liée à une entité "Book" fortement typée.

Lorsque vous soumettez le formulaire, vous devez disposer d'une méthode de contrôleur avec [HttpPost].

Ensuite, vous pouvez le faire pour présenter le livre:

string bookName = Request.Form["Name"]; 
int collectionId = Request.Form["CollectionID"]; 

ou passer à travers un modèle fortement typé:

public ActionResult CreateBook(Book book) { } 

Alors vous faites ceci:

Book newBook = new Book (book.Name, book.CollectionID); 
someDal.CreateBook(newBook); 

Lorsque vous importez votre modèle dans l'EDMX, assurez-vous de cocher "Inclure les clés étrangères dans le modèle". Cela permet d'ajouter le FK "CollectionID" à l'entité Book, ce qui vous permet de vous lier à cette propriété et d'accéder à cette propriété sur chaque modèle de livre.

Il ya un très bon article here sur les opérations CRUD avec des vues ASP.NET MVC fortement typées, devrait vous mettre sur la bonne voie.

HTH.

+0

Merci beaucoup pour votre aide! –

+0

Pas de soucis mec. :) – RPM1984

+0

Donc, je comprends cet exemple, mais si j'essaie d'insérer automatiquement l'id de collection correct, sans que cet élément apparaisse sur le formulaire, comment ferais-je cela? Donc, si collectionDetailsView a un lien vers createNewBook, comment puis-je dire à la méthode [HttpPost] createNewBook ​​que l'ID de collection est celui dont provient le lien? –

Questions connexes