簡體   English   中英

沒有主鍵的Fluent-NHibernate表映射

[英]Fluent-NHibernate table mapping with no primary key

我正在嘗試創建一個沒有主鍵/引用的數據庫表的映射。

public class TestMap : ClassMap<<Test>Test> {

    public TestMap() {

        WithTable("TestTable");

        Map(x => x.TestColumn);

    }

}

這失敗並期望id或composite-id。 這是否可以流利的nhibernate?

至少在Oracle中,我使用了“ROWID”。 對於mssql,您可以使用“ROW_NUMBER()”內置函數來只讀訪問該表,但我沒有嘗試過......

不需要。您必須添加代理主鍵(例如SQL Server中的標識列)來映射此表。 據我所知,NHibernate本身並不支持。

為什么你沒有這張桌子上的主鍵?

如果我們可以從沒有主鍵/身份庫的表中提取一列,那么我們可以使用如下流程:

Id(x => x.TempID).Column("TempID");

如果表包含屬於另一個實體的數據,則可以將其映射為組件集合。 組件未自行確定,但它們屬於另一個實體,這確定的。

您可以將實體映射到表,而無需在數據庫中定義鍵。 我在舊版SQL Server數據庫中這樣做。 但是,該表必須具有候選鍵 (某些列實際存儲唯一的值組合)。 實體的概念涉及某種身份的概念。 而不是這個,你在代碼中嘗試的是映射沒有身份的實體,這是不可能的。

據我所知,nhibernate不支持此功能。 但是,作為一般的經驗法則,您應該總是擁有某種ID,如果您發現自己處於一種您認為不需要ID的情況,那么您應該評估您的數據模型。 應該存在ID,無論是特定於表的主鍵還是來自另一個表的代理鍵。 這不僅可以確保nhibernate可以處理表,還可以通過索引來幫助提高性能。

在開始假設nhibernate不能滿足您的需求之前,請考慮為什么您沒有桌面上的密鑰以及沒有密鑰的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM