没有主键的Fluent-NHibernate表映射

时间:2009-05-05 01:54:27

标签: fluent-nhibernate

我正在尝试创建一个没有主键/引用的数据库表的映射。

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

    public TestMap() {

        WithTable("TestTable");

        Map(x => x.TestColumn);

    }

}

这失败并期望id或composite-id。这是否可以流利的nhibernate?

6 个答案:

答案 0 :(得分:4)

至少在Oracle中,我使用了“ROWID”。对于mssql,你可以使用“ROW_NUMBER()”内置函数来只读访问表,但我还没试过......

答案 1 :(得分:2)

没有。您必须添加代理主键(例如SQL Server中的标识列)才能映射此表。据我所知,NHibernate本身并不支持。

为什么这张桌子上没有主键?

答案 2 :(得分:0)

据我所知,nhibernate不支持此功能。但是,作为一般的经验法则,您应该总是拥有某种ID,如果您发现自己处于一种您认为不需要ID的情况,那么您应该评估您的数据模型。应该存在ID,无论是特定于表的主键还是来自另一个表的代理键。这不仅可以确保nhibernate可以处理表,还可以通过索引来帮助提高性能。

在你开始假设nhibernate不能满足你的需求之前,请考虑为什么你没有桌子上的钥匙以及没有钥匙的感觉。

答案 3 :(得分:0)

如果我们可以从没有主键/标识列的表中引入一列,那么我们可以使用如下流程:

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

答案 4 :(得分:0)

如果表格包含属于其他实体的数据,您可以将其映射为组件的集合。组件本身不是标识,但它们属于另一个 标识的实体。

答案 5 :(得分:0)

您可以将实体映射到表,而不在数据库中定义键。我在旧版SQL Server数据库中这样做。但是,该表必须具有候选键(某些列实际存储唯一的值组合)。 实体的概念涉及某种身份的概念。 而不是这个,你在代码中尝试的是映射一个没有身份的实体,这是不可能的。