Свободное владение картой nhibernate, используя propertyref без fetch.join - PullRequest
2 голосов
/ 24 августа 2011

Я использую Nhibernate 3.2 вместе со сборкой FluentNhibernate, совместимой с NH 3.2, и я пришел, чтобы отобразить устаревшую часть моей системы.Я считаю, что можно делать то, что мне нужно, но мне нужна некоторая помощь для правильного сопоставления.

У меня есть класс пользователя ниже со списком приложений.

public class User 
{
    public virtual string UserID { get; set; }
    public virtual int Id { get; set; }
    public virtual IList<Application> Applications { get; set; }
}

У меня также есть класс Application, у которого есть внешний ключ к классу пользователя, который не является «первичным ключом».См. Ниже

public class Application 
{
    // Not sure if this 'User' is needed?
    public virtual User User { get; set; }
    public virtual int IdFromUserTable { get; set; }
    public virtual string ApplicationName { get; set; }

}

У меня есть соответствующие ClassMaps, я думаю, что именно в UserMap лежит проблема

UserMap

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Id(x => x.UserID);
        HasMany(x => x.Applications)
            .AsBag()
            .KeyColumn("UserID")
            .PropertyRef("Id")
            .LazyLoad()
            .Inverse();
        Table("usertable");
        ReadOnly();
    }
}

ApplicationMap

public class ApplicationMap : ClassMap<Application>
{
    public ApplicationMap()
    {
        CompositeId()
            .KeyProperty(x => x.ApplicationName)
            .KeyProperty(x => x.IdFromUserTable, "UserID");   
        Table("applicationstable");
    }
}

Структуры таблицы следующие:

Таблица пользователей

Primary Key - string, ColumnName = UserID
int (Identity) - int, ColumnName = Id

Таблица приложений

Composite Key - string, ColumnName = ApplicationName
and
int, ColumnName = UserId (references Id column in user table)

Мой вопрос состоит в том, как заставить отображение работать для вышеуказанного сценария.

Одно предостережение: я не могу изменить структуру базы данных, но я могу изменитьclasses / classmaps

Любая помощь очень ценится ..

PS - Я действительно заставил это работать, добавив Fetch.Join в пользовательскую карту HasMany, но я бы предпочел лениво оценить Список приложенийкогда нужно

Спасибо, Марк

...