У меня есть модель, такая как это (упростил)
public class Post
{
public string ID { get; set; }
public string Title { get; set; }
public string Body { get; set; }
public string AuthorName { get; set; }
public List<string> Attachments { get; set; }
}
В моей базе данных у меня есть таблица Post и таблица PostAttachment
Таблица Attachment сообщения имеет 2 столбца:
PostID AttachmentKey
(Основы этого - то, что вложение загружается на Amazon S3, таким образом, AttachmentKey является s3 ключом),
То, что я хочу сделать, отобразить AttachmentKey на Список возвращенного / вставленный объект Сообщения...
Как я пошел бы о выполнении этого?
Вам может понадобиться тип вокруг строки, хотя бы для того, чтобы иметь возможность сгенерировать имя таблицы. В любом случае что-то вроде List может быть более значимым в вашем приложении. Я уверен, что вы можете копнуть глубже и сопоставить непосредственно со строкой, если вам нужно.
Оттуда вы можете начать с сопоставления HasMany и внешнего ключа, указывающего на вашу таблицу сообщений, т.е.
HasMany (o => o.PostAttachments).ForeignKeyConstraintName ("FK_Attachment_Post");
Я думаю, что по умолчанию это будет искать столбец post_ID в вашей таблице (не обязательно должен присутствовать в пост вложения), я уверен, что есть способ обойти это, если вам это нужно.
Вам также может понадобиться .Inverse () для сопоставления, в зависимости от того, как вы хотите сохранять вложения публикации.
править: после просмотра сообщения Диего, я думаю, что приведенное выше может работать, если PostAttachments представляет собой список строк. Я использовал метод, который он опубликовал ранее, и я почти уверен, что HasMany по умолчанию сопоставляется с сумкой nhibernate. Вам, вероятно, потребуется указать имена столбцов в вашем сопоставлении, чтобы использовать существующую таблицу.
Если я не неправильно понял вопрос, это просто следующее:
<bag name="Attachments" table="Attachment">
<key column="PostId" />
<element column="AttachmentKey" />
</bag>
Кстати, Вложения
должны быть IList
, а не List
.