1

J'utilise le modèle ADO.NET Strogly-Typed DataSet depuis environ 2 ans pour gérer les exécutions de procédures CRUD et stockées. L'année dernière, j'ai construit ma première application MVC et j'ai vraiment apprécié la facilité et la flexibilité de LINQ. Peut-être que le point le plus important pour moi était qu'avec LINQ je n'avais pas besoin de créer des procédures stockées "Insert" qui retourneraient SCOPE_IDENTITY (Les instructions d'insertion générées automatiquement dans le modèle DataSet n'étaient pas capables de cela sans modification). Actuellement, j'utilise LINQ avec des WebForms ASP.NET 3.5. Mes inserts sont à la recherche comme ceci:LINQ InsertOnSubmit Champs obligatoires pour le débogage

ProductsDataContext dc = new ProductsDataContext(); 
product p = new product 
{ 
     Title = "New Product", 
     Price = 59.99, 
     Archived = false 
}; 

dc.products.InsertOnSubmit(p); 
dc.SubmitChanges(); 

int productId = p.Id; 

Ainsi, cet exemple de produit est assez basique, à droite, et à l'avenir, je vais probablement ajouter plus de champs à la base de données tels que « InStock », « Quantité » , etc ... La façon dont je le comprends, je devrai ajouter ces champs à la table de base de données et alors supprimer et rajouter les tables à la vue de conception de classe de LINQ to SQL afin d'actualiser le DataContext. Est-ce que ça sonne bien?

Le problème est que tous les nouveaux champs qui ne sont pas null ne sont pas interceptés par les processus de génération ASP.NET. Par exemple, si j'ai ajouté un champ non nul de "Quantité" à la base de données, le code ci-dessus serait toujours construit. Dans le modèle DataSet, la méthode de procédure stockée accepterait une certaine quantité de paramètres et m'avertirait que mon insertion échouerait si je n'incluais pas une valeur de quantité. La même chose vaut pour les méthodes de procédures stockées LINQ, cependant, à ma connaissance, LINQ n'offre pas un moyen de générer automatiquement les instructions d'insertion et cela signifie que je suis de retour à l'endroit où j'ai commencé. En fin de compte, si j'utilise des instructions d'insertion comme celle ci-dessus et que j'ajoute un champ non nul à ma base de données, cela casserait mon application à environ 10-20 endroits et je n'aurais aucun moyen de détecter il. Est-ce que ma seule option est de faire une recherche côté solution pour le mot clé "products.InsertOnSubmit" et de m'assurer que le nouveau champ est assigné?

Y a-t-il un meilleur moyen?

Merci!

Répondre

0

Créez un champ NON-NULL, avec une valeur par défaut de n'importe quoi. De cette façon, les anciennes lignes auront une valeur par défaut que vous connaissez, vous permettant de revenir en arrière et d'ajouter des valeurs à la table.

Questions connexes