Изменение типа столбца родительского ключа в сопоставлении «многие ко многим» - PullRequest
3 голосов
/ 19 марта 2010

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

HasManyToMany<Attachment>(x => x.Attachments)
  .Table("ObjectAttachments")
  .ParentKeyColumn("ObjectId")
  .ChildKeyColumn("AttachmentId")
  .Fetch.Select()
  .LazyLoad()
  .AsBag();

Класс-владелец использует длинный (числовой) тип для идентификатора, в то время как таблица соединения использует строковый тип для идентификатора объекта. Как я мог сопоставить это для того, чтобы изменить тип данных на лету? Есть ли что-то, что я могу использовать для перехвата и преобразования?

Возможно, я смогу открыть обсуждение, предоставив немного больше информации. Табличные отношения можно посмотреть так:

Оборудование - (r1) - Объектные крепления - (r2) - Навесное оборудование

  • r1 определяется Equipment .Id = ObjectAttachments .Object_Id AND ObjectAttachments .Class = 'Equipment'
  • r2 определяется как ObjectAttachments .Attachment_Id = Attachment .Attachment_Id

То, что бросает меня в цикл - это Equipment .Id - integer тип данных и ObjectAttachments .Object_Id - string .

ОБНОВЛЕНИЕ : Вот как я поступил на данный момент - я создал отдельный репозиторий для вложений и создал карту, которая заносит в таблицу соединений. Хранилище требует, чтобы я преобразовал идентификатор оборудования в строку. Это не то, на что я надеялся, но сейчас это работает. Вот как выглядит эта карта:

Table("Attachments");
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.Description);
Map(x => x.MimeType);
Map(x => x.Size);
Map(x => x.Date);
Map(x => x.Content).LazyLoad();
Join("ObjectAttachments", join =>
    {
        join.KeyColumn("Id");
        join.Map(x => x.ObjectId);
    });

1 Ответ

1 голос
/ 28 июля 2010

Одним из решений будет добавление дополнительного столбца в таблицу с идентификатором строки с формулой для возврата приведенного идентификатора строки к правильному числовому типу. Это ограничивает проблему с базой данных базой данных, а не позволяет ей сливаться с кодом.

...