2

「メッセージ」という名前のマップされたクラスが必要です。このクラスには、一意の ID、タイトル、テキスト、および送信者と受信者に関する情報が含まれている必要があります。ユーザー ID と名前が必要なので、"User" という名前の別のクラスを作成しました。このクラスには、これら 2 つのプロパティが含まれています (後で、このクラスのメソッドをいくつか作成し、別のクラスで使用するため、クラス "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」という名前のプロパティがなくなったとしても...

私が間違っていることのヒントを教えていただけますか?

4

2 に答える 2

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 によって提示された解決策よりも私の問題にもう少し適合します (しかし、私は答えてくれて本当にありがとう!)

于 2012-05-18T14:34:33.890 に答える
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);
    }
}
于 2012-05-15T06:04:24.437 に答える