我正在工作瓦特/一个旧数据库设置
愚蠢
分别由一个字符id列和两个字符列构成一个日期和时间组成的索引。我为日期和时间列创建了一个ICompositeUserType
,以映射到我的实体上的一个.NET DateTime
属性,该属性在不是ID的一部分时自行工作。我需要以某种方式使用具有关键属性映射的复合ID,其中包括我的ICompositeUserType
,以映射到两个字符日期和时间列。显然瓦特/我的版本功能NHibernate的,CompositeIdentityPart
没有一个CustomTypeIs()
方法,所以我不能只是做我重写以下:如何使用Fluent NHibernate将复合标识映射到复合用户类型?
mapping.UseCompositeId()
.WithKeyProperty(x => x.Id, CommonDatabaseFieldNames.Id)
.WithKeyProperty(x => x.FileCreationDateTime)
.CustomTypeIs<FileCreationDateTimeType>();
是这样的,甚至可能瓦特/ NHibernate的更不用说流利?我一直无法找到任何这方面的信息。
UPDATE:
更加仔细阅读NHibernate的documentation后,我发现NHibernate的不支持component composite IDs,但它并不像它支持自定义类型(即IUserType
和ICompositeUserType
)复合的ID。此外,我的Fluent版本不支持NHibernate对组件ID的支持(请参阅issue 387和issue 346)。我可能会尝试升级我的整个解决方案,看看它是否有效,并发布一个答案,如果它的确如此......除非有人能告诉我没有我必须这样做...... 8o)
不幸的是,我根本无法修改数据库。如果取决于我,我们会完全重新设计这个东西。那么你的代码示例依赖于你所建议的视图,还是可以在没有视图的情况下完成? – gabe 2010-04-04 22:41:03
没有看法。对它进行实验,有时最好的方法是了解如果可以用Fluent来完成某些事情,那就是下载源代码并查看单元测试。虽然,我认为你应该将每一列映射到自己的领域,并提供结合它们的附加属性。 – 2010-04-05 02:45:13
检查UTs的好主意。 关于在使用icompositeusertype的映射中组合字段的好处是,我不必在我的域对象中包含遗留的数据库数据访问格式转换,它应该只包含业务逻辑。我对数据访问翻译和POCO类业务逻辑有着分离的关注。如果可以的话,我试图保持这种抽象。我不能将此标记为答案,因为CompositeIdentityPart不包含Columns属性。我需要将FileCreationDateTime分解为组合键/ ID。 – gabe 2010-04-05 14:02:50