Как удалить запись?

Я пытаюсь удалить запись базы данных, используя ASP.NET MVC, Fluent и NHibernate. См. приведенный ниже код для примеров того, как я пытаюсь это сделать. Я могу получать, обновлять и вставлять записи, но удаление не работает. Когда метод Delete() вызывается в контроллере (верхний), он генерирует исключение (System.Data.SqlClient.SqlException: Invalid object name 'Styles'.).

Я хотел бы избежать любого мета-SQL-запроса, потому что я не хочу жестко кодировать имя таблицы в контроллере, если мне это не нужно.

Фрагмент контроллера:

// 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;
    }
}

Фрагмент репозитория:

//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();
        }
    }
}

Фрагмент сопоставления:

//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();
    }
}

person Joe Phillips    schedule 05.09.2010    source источник
comment
Какое исключение выбрасывается? Что касается жесткого кодирования, вы уже жестко закодировали репозиторий в своем контроллере, поэтому ваш код тесно связан с NHibernate. Перехватывать исключение, фактически ничего не делая с ним, например, не регистрируя его, это очень плохая практика. Кроме того, с какой стати вы создаете новый экземпляр BrandRepository внутри метода Delete, который, как кажется, уже является частью этого класса?   -  person Darin Dimitrov    schedule 06.09.2010
comment
Довольно сложно понять, какое исключение выдается, потому что я должен вернуть представление, иначе оно не будет построено.   -  person Joe Phillips    schedule 06.09.2010
comment
Ну, поставьте catch (Exception ex) и отладьте значение ex, или, что еще лучше, удалите блок try/catch и оставьте исключение распространяться.   -  person Darin Dimitrov    schedule 06.09.2010
comment
Эти 3 фрагмента кода представляют собой отдельные файлы. Форматирование в Stackoverflow не позволяет мне легко разделить их. попробую отредактировать   -  person Joe Phillips    schedule 06.09.2010
comment
Хорошо, хороший момент. Смотрите мои правки пожалуйста   -  person Joe Phillips    schedule 06.09.2010
comment
Хорошо. Я умственно отсталый. Моя таблица называется Shoes, и я думал, что изменил ее на Styles, но, видимо, это не так.   -  person Joe Phillips    schedule 06.09.2010


Ответы (1)


Похоже, сопоставление свойства Styles неверно. Вы используете правильное имя таблицы? Из исключения кажется, что такой таблицы Styles нет.

person Darin Dimitrov    schedule 05.09.2010