Я использую 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, но я бы предпочел лениво оценить Список приложенийкогда нужно
Спасибо, Марк