Я новичок в nhibernate и столкнулся с проблемой.У меня есть следующие таблицы:
Таблица 1: Имя таблицы: Пользователи, Столбец 1: ID, Столбец 2: Имя
Таблица 2: Имя таблицы: Миссии, Столбец 1: ID, Столбец 2: Описание
Таблица 3: Имя таблицы: UserToDoMissions, Столбец 1: UserID, Столбец 2: MissionID, Столбец 3: Rank
Вот код: MissionMap:
public class MissionMap : ClassMap<Mission>
{
public const string TableName = "tblMissions";
public const string c_id = "achID";
public const string c_name = "achName";
public MissionMap()
{
Table(TableName);
Id(x => x.ID).Column(c_id).Not.Nullable();
Map(x => x.Name).Column(c_name).Not.Nullable();
HasMany(x => x.UserToDoList).Cascade.All().Inverse().KeyColumn(UserToDoMap.c_missionID);
}
}
Карта пользователя:
public class UserMap : ClassMap<User>
{
public const string TableName = "tblUsers";
public const string c_id = "usrID";
public const string c_userName = "usrUserName";
public UserMap()
{
Table(TableName);
Id(x => x.ID).Column(c_id).Not.Nullable();
Map(x => x.UserName).Column(c_userName).UniqueKey(DBConsts.UniqueKeys.User_UserName).Not.Nullable();
HasMany(x => x.UserToDoList).Cascade.All().Inverse().KeyColumn(UserToDoMap.c_userID);
}
}
Карта UserToDo:
public class UserToDoMap : ClassMap<UserToDo>
{
public const string TableName = "tblToDoList";
public const string c_userID = "tdlUserID";
public const string c_missionID = "tdlMissionID";
public const string c_rank = "tdlRank";
public UserToDoMap()
{
Table(TableName);
CompositeId().KeyReference(x => x.User, c_userID).KeyReference(x => x.Achievment, c_missionID);
References(x => x.User).Column(c_userID).Cascade.All().UniqueKey(DBConsts.UniqueKeys.ToDoList_UserRanks).Not.Nullable();
References(x => x.Mission).Column(c_missionID).Cascade.All().Not.Nullable();
Map(x => x.Rank).Column(c_rank).UniqueKey(DBConsts.UniqueKeys.ToDoList_UserRanks).Not.Nullable();
}
}
Моя проблема в том, что я не могу сохранить новую строку.Я могу выбрать и получить все вещи, но не могу сохранить.Есть идеи?
Спасибо.
Редактировать: Я ничего не получаю.Не выдается никаких исключений, но строка не добавляется в БД.Кстати, я использую метод сохранения для объекта UserToDo.
Редактировать 2: После ответа docmanhattan вот код:
UserToDoMap:
public class UserToDoMap : ClassMap<UserToDo>
{
public const string TableName = "tblToDoList";
public const string c_userID = "tdlUserID";
public const string c_missionID = "tdlMissionID";
public const string c_rank = "tdlRank";
public UserToDoMap()
{
Table(TableName);
CompositeId<UserToDoId>(x => x.ID)
.KeyReference(x => x.UserIdPart, c_userID)
.KeyReference(x => x.MissionIdPart, c_missionID);
References(x => x.ID.UserIdPart).Column(c_userID).Cascade.All().UniqueKey(DBConsts.UniqueKeys.ToDoList_UserRanks).Not.Nullable();
References(x => x.ID.MissionIdPart).Column(c_missionID).Cascade.All().Not.Nullable();
Map(x => x.Rank).Column(c_rank).UniqueKey(DBConsts.UniqueKeys.ToDoList_UserRanks).Not.Nullable();
}
}
UserToDoId entity
public class UserToDoId
{
public virtual User UserIdPart { get; set; }
public virtual Mission MissionIdPart { get; set; }
public override bool Equals(object obj)
{
UserToDoId recievedObject = (UserToDoId)obj;
if ((UserIdPart.ID == recievedObject.UserIdPart.ID) &&
(MissionIdPart.ID == recievedObject.MissionIdPart.ID))
{
return (true);
}
return (false);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
Сущность UserToDo:
public class UserToDo
{
public virtual UserToDoId ID { get; set; }
public virtual int Rank { get; set; }
public UserToDo()
{
}
public override bool Equals(object obj)
{
UserToDo recievedObject = (UserToDo)obj;
if ((ID.UserIdPart.ID == recievedObject.ID.UserIdPart.ID) &&
(ID.MissionIdPart.ID == recievedObject.ID.MissionIdPart.ID) &&
(Rank == recievedObject.Rank))
{
return (true);
}
return (false);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
При попытке создать фабрику сеанса я получаю исключение:
{"Couldне найден метод получения свойства 'UserIdPart' в классе 'DatabaseEntities.UserToDo' "}