1

nHibernateのschemaExportクラスを使用してデータベースを作成します。これで、nhibernateマッピングを生成した属性を持つクラスができました。このクラスの一部は次のとおりです。

public class PluginInstance
{
    ...
    [Bag(2, Name = "RouteParams", Access = "property", Table = "CMS_PluginInstanceRouteParams")]
    [Key(3, Column = "ParamId")]
    [Element(4, Column = "Param", Type = "string")]
    public virtual IList<String> RouteParams
    {
        get { return _routeParamsField; }
        set { _routeParamsField = value; }
    }
    ...
}

nHibernateマッピングの生成された部分は次のとおりです

<bag name="RouteParams" access="property" table="CMS_PluginInstanceRouteParams">
  <key column="ParamId" />
  <element column="Param" type="string" />
</bag>

このプロパティは、次の呼び出し時に作成される「CMS_PluginInstanceRouteParams」テーブルが正しいためです。

var schemaExport = new SchemaExport(configuration);
schemaExport.Create(false, true);

しかし、なぜこのテーブルに主キーがないのか疑問に思いました。生成された構造はデータベース構造

列ParamIdは、クラスPluginInstanceのテーブルへの外部キーであり、列Paramには、格納されているプロパティRouteParamsの値が正しく含まれています。

このテーブルに主キーは必要ありませんか?NHibernate.Mapping.Attributesを使用してこのプロパティに主キーを設定することは可能ですか?

4

1 に答える 1

2

テーブルはエンティティとしてマップされないため、データベースから単独でフェッチされることはありません。したがって、NHibernateはそのテーブルの主キーを必要とせず、作成しません。

編集:

そのテーブルに主キーが必要な場合は、そのための列を追加することをお勧めします。ParamIdを主キーとして使用しても機能しません。のクラスと対応するマッピングファイルを作成すると、NHibernateは主キーを使用してテーブルを作成しますRouteParams

于 2011-04-22T22:40:00.633 に答える