Использование беглого NHibernate для отображения представления SQL для чтения только - PullRequest
2 голосов
/ 25 января 2012

Я пытаюсь получить Fluent Nhibernate для представлений Automap, доступных только для чтения, для которых не указан первичный или составной ключ.Кажется, что это возможно, так как документ API для ClassMap предоставляет конструктор по умолчанию для Id ().

http://fluentnhibernate.org/api/FluentNHibernate.Mapping/ClassMap%601.htm

он говорит

IdentityPart Id () Создайте Id, у которого нет соответствующего свойства в объекте домена или столбца в базе данных.Это главным образом для использования с доступом только для чтения и / или представлениями.По умолчанию используется тождество int с генератором «increment».

Я попытался переопределить сопоставление для сущности, которая соответствует моему представлению, и удалил соглашение о первичном ключе, которое задает имя поля Id,Он добавляет столбец id к запросам в представлении, которые не выполняются из-за отсутствия такого столбца.

Я пытаюсь избавиться от поддельных первичных ключей в моих представлениях, так как считаю, что должен быть лучший способсделайте это.

Вот фрагмент переопределения, который я использую

public class PersonMap: IAutoMappingOverride<Person>
{
    public void Override(AutoMapping<Person> mapping)
    {
        mapping.Id();
    }
}

Почему это не работает?

1 Ответ

1 голос
/ 25 января 2012

Способ обойти это, как правило, назначать произвольное свойство для идентификатора, и оно генерируется назначенным.По сути, это то же самое, что и карта.

public class ItemViewMap : IAutoMappingOverride<ItemView>
{
    public void Override(AutoMapping<ItemView> mapping)
    {
        mapping.Id(x => x.Column).GeneratedBy.Assigned();
    }
}
...