Вопрос

Я пытаюсь использовать Filestream на сервере sql 2008 для хранения загруженных пользователем изображений.

Моя проблема в том, что NHibernate не выдает ошибок, но и не сохраняет данные в базу данных.Никакая запись не создается.

Приведенный ниже класс Image является пользовательским классом (не путать с System.Drawing.Image).

public class ImageMap : ClassMap<Image>
{
    public ImageMap()
    {
        WithTable("Images");

        Id(x => x.ImageId).GeneratedBy.GuidComb().WithUnsavedValue(Guid.Empty);

        Map(x => x.ImageData);
        Map(x => x.Extension);

        References(x => x.Owner, "UserId");
    }
}

Мой метод сохранения выглядит так:

public void Save(Image image)
    {
        ISession session = GetSession();

        session.SaveOrUpdate(image);
    }

Возможно, я неправильно сохраняю, возможно, у меня отключена карта.ImageData — это поле varbinary(max) в базе данных.

Это было полезно?

Решение

Ответ на это был прост.Я удалил переопределение метода сохранения, и оно исправилось.В нашем базовом классе уже был определен метод сохранения, и мое переопределение было совершенно неправильным.

public void Save(T entity)
    {
        using (ISession session = GetSession())
        using (ITransaction tx = session.BeginTransaction())
        {
            session.SaveOrUpdate(entity);
            tx.Commit();
        }
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top