1

私はこのような実体を持っています

public class Person
{
    public virtual int Pkey { get; set; }
    public virtual string Name { get; set; }

    public List<Person> Friends{ get; set; }
}

テーブル情報はこんな感じ

create table Person
(
    PKey int not null IDENTITY,
    Name varchar (20),
    primary key (PKey)
)

友達のリストを取得するために、私はこのような別のテーブルを維持しています

Create table Friends
(
     PKey int not null IDENTITY,
     PersonFKey int not null Foreign key references Person(PKey),
     FriendFKey int not null Foreign key references Person(PKey)
)

今、私が以下のようにマッピングを行うとき、私はいくつかのエラーを受け取ります(マッピングの問題のため)

 public class PersonMap :  ClassMap<Person>
 {
    public PersonMap()
    {
        Id(x => x.Pkey);
        Map(x => x.Name);
        HasManyToMany(x => x.Friends).Cascade.All().Table("Friends").ParentKeyColumn("PersonFKey");
    }
 }

スローされる例外は、

FluentConfigurationException: "An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail."

内部の例外を除いて、

InvalidProxyTypeException: The following types may not be used as proxies:

FluentNhibernateLearning.Entities.Person: method get_Friends should be 'public/protected virtual' or 'protected internal virtual'
FluentNhibernateLearning.Entities.Person: method set_Friends should be 'public/protected virtual' or 'protected internal virtual'

誰かが私が欠けているものを指摘するのを手伝ってもらえますか?

4

2 に答える 2

4

エラーが何であるかを述べておらず、マッピングがクラスと一致しませんが、問題はChildKeyColumn宣言がないことだと思います。多対多のマップでは、親と子のキー列を宣言する必要があります。親キーはコレクションを含むクラスの主キーであり、子キーはコレクション内のクラスの主キーです。

また、多対多のカスケードは、削除によってすべての関連エンティティが削除されるため、ほとんど必要ありません。つまり、人を削除すると、すべての友達が削除されます。

 public class IntermediaryMap :  ClassMap<Intermediary>
 {
    public IntermediaryMap()
    {
        Id(x => x.Pkey);
        Map(x => x.Name);
        HasManyToMany(x => x.SubBrokers).Table("Intermediary2SubBroker")
            .ParentKeyColumn("IntermediaryFKey")
            .ChildKeyColumn("SubBrokerFKey")
            .AsSet();
    }
 }
于 2013-01-01T15:37:56.687 に答える
0

Friends をvirtualとして宣言する必要があると思います。

それが、次のように内部例外メッセージが伝えていることです。

「メソッド get_Friends は、' public /protected virtual ' または 'protected internal virtual' である必要があります」

于 2013-01-02T15:36:43.547 に答える