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 4

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 не дубликаты карт.

Я обнаружил, что мне пришлось явно задать имя столбца в аналогичном случае. Что-то вроде

  Id(x => x.Username).Column("Username").GeneratedBy.Assigned();