流畅的 NHibernate 复合 ID 长度设置不正确
本文关键字:设置 不正确 ID 复合 NHibernate | 更新日期: 2023-09-27 18:34:50
Fluent NHibernate错误地设置了我的列长度。
我做错了什么?
public class ResourceEntryMap : ClassMap<ResourceEntry>
{
public ResourceEntryMap ()
{
CompositeId ()
.KeyProperty (x => x.Culture, set => {
set.ColumnName ("Culture");
set.Length (10);
set.Access.Property ();
})
.KeyProperty (x => x.Name, set => {
set.ColumnName ("Name");
set.Length (100);
set.Access.Property ();
});
Map (x => x.Type).Column ("Type").Length (20);
Map (x => x.Value).Column ("Value").Length (4000).Not.Nullable ();
Table ("ResourceEntry");
}
}
当它创建表时,我得到这个
culture character varying(255) NOT NULL,
name character varying(255) NOT NULL,
type character varying(20),
value character varying(4000) NOT NULL,
CONSTRAINT resourceentry_pkey PRIMARY KEY (culture, name)
有什么想法吗?
这似乎是一个NHibernate错误(见这里(,但是Fluent NHibernate的贡献者在该票证中提到,这实际上是Fluent NHibernate的问题。但它尚未修复(请参阅此错误(
您可以通过使用 XML 映射来解决此问题,但由于 Fluent 只是生成 NHibernate 使用的 XML,因此我不确定 Fluent 的问题可能是什么(阅读我提到的两个错误对我来说不清楚(。
好消息是,如果排除ColumnName
选项,则映射看起来是正确的:
CompositeId ()
.KeyProperty(x => x.Culture, set => {
set.Length(10);
set.Access.Property();
})
.KeyProperty(x => x.Name, set => {
set.Length(100);
set.Access.Property();
});
由于属性名称与列名称相同,因此无需显式设置列名称。