NHibernate 正在忽略 ForeignKey 属性
NHibernate is ignoring ForeignKey property
情况
我目前正在处理的项目使用 NHibernate 和 Fluent NHibernate。
Oracle 数据库已经存在,无法更改。t/shouldn
我遇到的问题是 Fluent NHibernate 似乎忽略了以下代码示例中的 ForeignKey
property/method。
Table("PERSON_PACKET");
Id(x => x.Id, "ID").GeneratedBy.UuidHex("N");
// Some Map(...) methods
References(x => x.Packet)
.Column("PKT_IDENTIFICATION")
.ForeignKey("IDENTIFICATION")
.Cascade.None()
.Fetch.Select()
.Not.LazyLoad();
谁能解释一下这里发生了什么?
我是怎么发现这个的
这部分数据库的结构如下:
这三个实体实际上都是视图而不是表,但其背后的表是相似的。
PACKET
视图有两个相似的字段。一种叫做 IDENTIFICATION
,它是一个数字,另一种叫做 ID
,它是 IDENTIFICATION
与其他一些数据连接而成的 varchar。
PACKET_PERSON
的列 PKT_IDENTIFICATION
与 PACKET.ID
具有相同的串联格式(因此不是 PACKET.IDENTIFICATION
)
奇怪的是上面的映射有效,即使错误的列在 ForeignKey
方法中。此映射自 2014 年以来一直有效。
然后我尝试将 ForeignKey
方法更改为 ForeignKey("ID")
,这也有效。
最后我将方法更改为 ForeignKey("JUST_SOMETHING_THAT_IS_NO_COLUMN")
并且一切正常。
这里发生了什么?
我认为该方法用于模式生成。我认为它等同于 NH XML 映射的 this 部分。
来自文档:
...specifies the name of the foreign key constraint generated for an association, use it on <one-to-one>
, <many-to-one>
, <key>
, and <many-to-many>
mapping elements.
这就是它没有任何明显效果的原因。如果您从映射文件生成数据库,您只会看到名为 JUST_SOMETHING_THAT_IS_NO_COLUMN
的外键约束。
如果您不打算生成架构,您的映射可能会变成:
References(x => x.Packet)
.Column("PKT_IDENTIFICATION")
.Cascade.None()
.Fetch.Select()
.Not.LazyLoad();
没有不良影响。
情况
我目前正在处理的项目使用 NHibernate 和 Fluent NHibernate。
Oracle 数据库已经存在,无法更改。t/shouldn
我遇到的问题是 Fluent NHibernate 似乎忽略了以下代码示例中的 ForeignKey
property/method。
Table("PERSON_PACKET");
Id(x => x.Id, "ID").GeneratedBy.UuidHex("N");
// Some Map(...) methods
References(x => x.Packet)
.Column("PKT_IDENTIFICATION")
.ForeignKey("IDENTIFICATION")
.Cascade.None()
.Fetch.Select()
.Not.LazyLoad();
谁能解释一下这里发生了什么?
我是怎么发现这个的
这部分数据库的结构如下:
这三个实体实际上都是视图而不是表,但其背后的表是相似的。
PACKET
视图有两个相似的字段。一种叫做 IDENTIFICATION
,它是一个数字,另一种叫做 ID
,它是 IDENTIFICATION
与其他一些数据连接而成的 varchar。
PACKET_PERSON
的列 PKT_IDENTIFICATION
与 PACKET.ID
具有相同的串联格式(因此不是 PACKET.IDENTIFICATION
)
奇怪的是上面的映射有效,即使错误的列在 ForeignKey
方法中。此映射自 2014 年以来一直有效。
然后我尝试将 ForeignKey
方法更改为 ForeignKey("ID")
,这也有效。
最后我将方法更改为 ForeignKey("JUST_SOMETHING_THAT_IS_NO_COLUMN")
并且一切正常。
这里发生了什么?
我认为该方法用于模式生成。我认为它等同于 NH XML 映射的 this 部分。
来自文档:
...specifies the name of the foreign key constraint generated for an association, use it on
<one-to-one>
,<many-to-one>
,<key>
, and<many-to-many>
mapping elements.
这就是它没有任何明显效果的原因。如果您从映射文件生成数据库,您只会看到名为 JUST_SOMETHING_THAT_IS_NO_COLUMN
的外键约束。
如果您不打算生成架构,您的映射可能会变成:
References(x => x.Packet)
.Column("PKT_IDENTIFICATION")
.Cascade.None()
.Fetch.Select()
.Not.LazyLoad();
没有不良影响。