Fluent NHibernate Composite Id 长度设置不正确
Posted
技术标签:
【中文标题】Fluent NHibernate Composite Id 长度设置不正确【英文标题】:Fluent NHibernate Composite Id Length set incorrectly 【发布时间】:2014-12-22 02:31:00 【问题描述】: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)
有什么想法吗?
【问题讨论】:
【参考方案1】:这似乎是一个 NHibernate 错误(请参阅 here),但是 Fluent NHibernate 贡献者在该票证中提到这实际上是 Fluent NHibernate 的一个问题...但尚未修复(请参阅此 bug)
您也许可以通过使用 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();
);
由于您的属性名称与列名称相同,因此您无需显式设置列名称。
【讨论】:
谢谢,今天试试看:)以上是关于Fluent NHibernate Composite Id 长度设置不正确的主要内容,如果未能解决你的问题,请参考以下文章
用 Fluent Nhibernate 定义 NHibernate 过滤器的语法?
Fluent NHibernate and Mysql,SQLite
Fluent NHibernate - NHibernate.QueryException:无法解析属性
Fluent Nhibernate and Stored Procedures
Castle Windsor 3 + Fluent NHibernate + Castle.NHibernate.Integration