4

FluentNhibernateAutomapperで必要なものを作成するのに問題があります。私には2つのエンティティがあり、それらの間には1対多の関係があります。

class Person
    {
        public string name;
        IList<departments> worksIn;

    }

    class Department
    {
        public string name;
    }

上記は明らかに骨の折れるものですが、次のような具体化されたスキーマを生成することを期待しています。

Person{id, name}
Department{id, name}
PersonDepartment{id(FK person), id(Fk Department)}

残念ながら、代わりに次のようになります。

Person{id, name}
Department{id, name, personid(FK)}

部門テーブルにPersonのFKを含めたくないので、複合PKとFksとして両方のテーブルのプライマリキーを含む別の結合/ルックアップテーブル(上記のPersonDepartment)が必要です。

最初のクラスを間違って作成しているかどうか(おそらく、リストのworksInではなくIDを表す最初のworkInである必要があります)、またはこれを手動でマップする必要があるかどうかはわかりません。

これはできますか?

4

1 に答える 1

0

クラスが構造化されている方法は、1対多の関係を示唆しているため(実際、質問でそれを説明する方法です)、FNHがデータベース関係をそのようにモデル化することを選択することは驚くべきことではありません。

ご提案のとおり、多対多のテーブルマッピングを手動で作成することは可能です。しかし、これは間違いなくあなたが望むものですか?

私は、純粋な多対多の関係は非常にまれであり、通常、中間エンティティを導入し、2つの1対多の関係を使用するのに適したケースがあることに気付く傾向があります。これにより、リンクに追加情報を追加する可能性が残ります(たとえば、個人の「プライマリ」部門、または各部門内のオフィスの詳細など)。

この種の構造を示すいくつかの例の「ベアボーン」クラス:

public class Person
{
    public int Id { get; set;}

    public string Name { get; set;}

    public IList<PersonDepartment> Departments { get; set; }
}

public class PersonDepartment
{
    public int Id { get; set; }

    public Person Person { get; set; }

    public Department Department { get; set; }

    public bool IsPrimary { get; set; }

    public string Office { get; set; }
}

public class Department
{
    public int Id { get; set; }

    public IList<PersonDepartment> Personnel { get; set; }

    public string Name { get; set; }
}
于 2011-09-26T21:35:58.713 に答える