2011-04-22 68 views
1

我們使用nHibernate的schemaExport類創建數據庫。我現在有一個具有我們生成nhibernate映射的屬性的類。這個類的一個組成部分是:爲什麼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> 

對於此屬性是correcty的「CMS_PluginInstanceRouteParams」創建表時,我們稱之爲:

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

但我不知道爲什麼這個表沒有一個主鍵。生成的結構爲database structure

ParamId列正確地是類PluginInstance的表的外鍵,並且Param欄正確地存儲了屬性RouteParams的值。

有沒有必要在這個表中的主鍵?是否可以使用NHibernate.Mapping.Attributes來設置此屬性的主鍵?

+0

如果定義的芳族聚酰胺列主鍵,你就失去了1:N的關係,不是嗎?爲什麼你想在該表中使用主鍵? – 2011-04-22 22:40:23

+0

您的實體在哪裏定義? – 2011-04-22 23:28:19

+0

我想知道爲什麼這個表沒有主鍵,因爲我們使用de vs2010 datacomparer將一些初始數據從臨時數據庫複製到活動數據庫。但由於主鍵,此表不會顯示在比較器中。這個問題不是有關:http://stackoverflow.com/questions/5700864/visual-studio-2010-datacompare-table-comparison – 2011-04-23 00:39:56

回答

2

表沒有被映射爲一個實體,因此絕不會從自身的數據庫中獲取,因此NHibernate的不需要和不創建該表的主鍵。

編輯:

如果你想在這個表,我建議添加的是一個額外的列主鍵。使用ParamId作爲主鍵不適合你。如果您爲RouteParams創建一個類和相應的映射文件,NHibernate將使用主鍵創建表。

+0

感謝這個答案,我認爲同樣的,但不知道。我會試試這個。 – 2011-04-26 06:01:58

相關問題