Fluent nHibernate нет столбца идентичности в таблице
Как я могу указать с помощью fluent NHibernate mapping для таблицы, которая не имеет столбца идентификатора?
Я хочу что-то вроде этого:
public sealed class CustomerNewMap : ClassMap<CustomerNew>, IMap
{
public CustomerNewMap()
{
WithTable("customers_NEW");
Not.LazyLoad();
Not.Id(); // this is invalid...
Map(x => x.Username);
Map(x => x.Company);
}
}
Я имею в виду отсутствие первичного ключа, определенного в базе данных (не так много определено в базе данных).
3 ответа:
Я нашел ответ:
public CustomerNewMap() { WithTable("customers_NEW"); Not.LazyLoad(); Id(x => x.Username).GeneratedBy.Assigned(); Map(x => x.Company); }
Это не дает прямого ответа на вопрос.. но он отвечает на этот вопрос в комментарии к принятому здесь ответу.
У нас была та же проблема с представлением SQL над нашей бухгалтерской книгой. Проблема в том, что NHibernate будет счастливо дублировать строки, когда свойство
Id
не уникально. В нашем случае.. у нас были бухгалтерские операции, в которыхCustomerAccountId
было установлено какId
.. что не было уникальным в пределах видимости. Чтобы обойти это.. Я сопоставил CompositeId, который был основан на том, что я мог найти, что составляло строку уникальный. В нашем случае это была комбинацияCustomerAccountId
иWeekEnding
:CompositeId() .KeyProperty(x => x.CustomerAccountId) .KeyProperty(x => x.WeekEnding);
Этого было достаточно, чтобы иметь NHibernate не дубликаты карт.