首页 文章

为什么NHibernate创建没有主键的表?

提问于
浏览
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);

但我想知道为什么这个表没有主键 . 生成的结构是
database structure

ParamId列正确地是类PluginInstance表的外键,而Param列正确地存储了属性RouteParams的值 .

这张 table 上是否不需要主键?是否可以使用NHibernate.Mapping.Attributes在此属性上设置主键?

1 回答

  • 2

    该表未映射为实体,因此永远不会从数据库中提取,因此NHibernate不需要也不会为该表创建主键 .

    编辑:

    如果你想在该表中有一个主键,我建议为此添加一个额外的列 . 使用ParamId作为主键不适合您 . 如果为 RouteParams 创建一个类和相应的映射文件,NHibernate将使用主键创建表 .

相关问题