Отображение одного столбца дважды в беглом nhibernate - PullRequest
1 голос
/ 17 сентября 2010

Вот так ... У меня есть таблица (которую, к сожалению, я не могу изменить) с такими столбцами, как:

  • дата
  • startTime
  • endTime

У меня есть классы данных с двумя полями: startDateTime = date + startTime endDateTime = date + endTime

        Map(x => x.EndDateTime)
            .Columns.Clear()
            .Columns.Add("date", "endTime")
            .CustomType<MyCustomType>();

        Map(x => x.StartDateTime)
            .Columns.Clear()
            .Columns.Add("date", "startTime")
            .CustomType<MyCustomType>();

MyCustomType - это класс, реализующий интерфейс IUserType.Казалось, это работает, но работает только с чтением данных из базы данных.При сохранении или обновлении NHibernate дважды ставит столбец «дата», и запрос не может быть принят.

Мой вопрос: есть ли способ обойти это?Я хочу, чтобы оба поля были не только для чтения.(установка одного из них как доступного только для чтения помогает, но это не решение, которое меня устраивает).

Ответы [ 2 ]

0 голосов
/ 17 сентября 2010

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

0 голосов
/ 17 сентября 2010

Хорошо, я нашел решение ... это не очень элегантно, но эта база данных тоже не элегантна:)

Итак, в моем BaseController, который обрабатывает все вещи, такие как добавление, сохранение, удаление и обновление, я сделал некоторую специальную обработку сохранения этого конкретного типа:

    public virtual T Save<T>(T entity)
    {
        try
        {
            if (entity.GetType().Equals(typeof(SpecialType)))
            {
                return SaveSpecialType<T>(entity);
            }
            ITransaction transaction = session.BeginTransaction();           
            session.Save(entity);
            transaction.Commit();
            return entity;
        }
        catch (Exception ex)
        {
            if (logError.IsErrorEnabled)
                logError.Error(ex.Message + " \n " + ex.InnerException, ex);
            throw;
        }
    }

Этот метод SaveSpecialType выполняет собственный SQL-запрос, вставляя этот грязный тип в базу данных

...