J'essaie de supprimer un enregistrement de base de données en utilisant ASP.NET MVC, Fluent et NHibernate. Voir le code ci-dessous pour des exemples de comment j'essaye d'accomplir ceci. Je suis en mesure d'obtenir, mettre à jour et insérer des enregistrements, mais supprimer ne fonctionne pas. Lorsque la méthode Delete() est appelée dans le contrôleur (en haut), elle lance une exception (System.Data.SqlClient.SqlException: Invalid object name 'Styles'.
).Comment supprimer un enregistrement?
Je voudrais éviter toute sorte de requête méta-SQL parce que je ne veux pas coder en dur le nom de la table dans le contrôleur si je n'ai pas à le faire.
contrôleur extrait de code:
// POST: /Brand/Delete/5
// Here is the handler in the controller
[HttpPost]
public ActionResult Delete(int id, FormCollection collection)
{
try
{
IRepository<Brand> repo = new BrandRepository();
repo.Delete(id);
return RedirectToAction("Index");
}
catch
{
throw;
}
}
extrait Repository:
//Here is the repository
//The insert/update/get/etc all work fine
void IRepository<Brand>.Delete(int id)
{
using (ISession session = NHibernateHelper.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
IRepository<Brand> repo = new BrandRepository();
session.Delete(repo.GetById(id));
transaction.Commit();
}
}
}
Mapping extrait de code:
//And here is the mapping for a Brand
public class BrandMap : ClassMap<Brand>
{
public BrandMap()
{
Table("Brands");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Name);
HasMany(x => x.Styles)
.Inverse()
.Cascade.All();
}
}
Quelle exception est levée? En ce qui concerne le codage en dur, vous avez déjà codé en dur un référentiel dans votre contrôleur afin que votre code soit étroitement lié à NHibernate. Attraper une exception sans réellement faire quelque chose avec elle comme par exemple l'enregistrer est une très mauvaise pratique. Aussi pourquoi diable êtes-vous en train de créer une nouvelle instance de 'BrandRepository' dans la méthode' Delete' qui, comme elle semble déjà faire partie de cette classe? –
Il est difficile de savoir quelle exception est levée car je dois retourner une vue sinon elle ne va pas générer –
Bien mettre un 'catch (Exception ex)' et déboguer la valeur de 'ex' ou même mieux, supprimez le bloc 'try/catch' et laissez l'exception propager. –