我想要一个名为“Message”的映射类。此类应包括唯一ID,标题,文本以及有关发件人和接收者的信息。我需要他们的User-ID作为他们的名字,所以我创建了另一个名为“User”的类。这个类包含这两个属性(稍后我会为这个类创建一些方法并在不同的类中使用它,所以我不能使用onyl类“Message”)。
这是我的代码
public class User
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
}
public class Message
{
public virtual Guid Id { get; set; }
public User sender;
public User receiver;
public virtual string subject { get; set; }
public virtual string text { get; set; }
}
public class MessageMap : ClassMap<Message>, IMappedEntity
{
public MessageMap()
{
Id(x => x.Id, "MessageId");
Map(x => x.sender.Id, "SenderId");
Map(x => x.receiver.Id, "ReceiverId");
Map(x => x.subject);
Map(x => x.text);
}
}
如您所见,我只想保存发件人和收件人的用户ID,而不是他们的名字。因为x.Id,x.sender.Id和x.receiver.Id具有属性“Id”,所以我在数据库中为它们写下了一个特定的名称。 但是,如果我尝试加载该网站,则会出现以下错误:尝试在已添加时添加属性“Id”。,即使在我确定了名称之后,它们不再是名为“Id”的属性列...
你能否暗示我做错了什么?
答案 0 :(得分:3)
我终于找到了另一个解决方案:我将Message-Map的映射更改为:
public class MessageMap : ClassMap<Message>, IMappedEntity
{
public MessageMap()
{
Id(x => x.Id);
Component(
x => x.sender,
userId =>
{
userId.Map(x => x.Id, "senderId");
}
);
Component(
x => x.receiver,
userId =>
{
userId.Map(x => x.Id, "receiverId");
}
);
Map(x => x.subject);
Map(x => x.text);
}
现在,我不必映射User-Class,所以我没有只有我的Userid的表。
我对使用nHibernate并不太熟悉,所以我不是很清楚这是解决这个问题的最佳方法,但在我看来,这更符合我的问题,然后是Chev提出的解决方案(但是我非常感谢你回答了我!)
答案 1 :(得分:2)
按如下方式更改MessageMap。
public class MessageMap : ClassMap<Message>, IMappedEntity
{
public MessageMap()
{
Id(x => x.Id);
References(x => x.Sender);
References(x => x.Receiver);
Map(x => x.subject);
Map(x => x.text);
}
}