У меня есть таблица соединений, где исходная таблица представляет собой числовой тип, а ключевой столбец таблицы соединений представляет собой строковый тип. Устаревшее решение, которое я пытаюсь избежать, чтобы изменить его, чтобы минимизировать риск для объема работ.
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);
});