Fluent nhibernate 流利的纤维酸盐。自动映射和约定

Fluent nhibernate 流利的纤维酸盐。自动映射和约定,fluent-nhibernate,conventions,automapping,Fluent Nhibernate,Conventions,Automapping,我是NHibernate的新手,它的配置方面对我来说总是过于繁重。昨天,我遇到了Fluent NHibernate的自动映射功能,对此印象深刻 为了教育自己,我给自己设置了一个挑战,即使用自动映射和约定尝试“开始第一个项目”(Getting Started First Project)。我得承认运气不太好 总结一下我的步骤: 我对示例中的数据库模式做了一些小的更改,主要是从外键(即Product_id到ProductId)中删除下划线,因为这将使它更符合我们的数据库命名标准 Q1)我试图以For

我是NHibernate的新手,它的配置方面对我来说总是过于繁重。昨天,我遇到了Fluent NHibernate的自动映射功能,对此印象深刻

为了教育自己,我给自己设置了一个挑战,即使用自动映射和约定尝试“开始第一个项目”(Getting Started First Project)。我得承认运气不太好

总结一下我的步骤:

我对示例中的数据库模式做了一些小的更改,主要是从外键(即Product_id到ProductId)中删除下划线,因为这将使它更符合我们的数据库命名标准

Q1)我试图以ForeignKeyConvention为例编写IHasManyConvention实现,但WithKeyColumn方法似乎不存在(我认为这是因为我下载了昨天的构建,因此在撰写本文之后,设计发生了变化)。我如何纠正这一点

我还对示例中的Entities层做了一些小的更改,因为我认为这样会更容易,它们将StoresStockedIn重命名为Stores(Product.cs),将Staff重命名为Employees(Store.cs)

我的代码如下所示:

var cfg = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005
    .ConnectionString(c => c
        .Is(connectionString)))
.Mappings(m => m.AutoMappings.Add(
                AutoPersistenceModel.MapEntitiesFromAssemblyOf<Store>()
                    .Where(t => t
                        .Namespace == "FluentNHibernateTesting.Entities")
                        .ConventionDiscovery.Setup(c => c.Add<ForeignKeyConvention>())
                ))
.BuildSessionFactory();
var cfg=fluntly.Configure()
.数据库(MsSqlConfiguration.MsSql2005
.ConnectionString(c=>c
.Is(连接字符串)))
.Mappings(m=>m.AutoMappings.Add(
AutoPersistenceModel.MapEntitiesFromAssemblyOf()的
.其中(t=>t
.Namespace==“FluentNHibernateTesting.Entities”)
.ConventionDiscovery.Setup(c=>c.Add())
))
.BuildSessionFactory();
然后,我尝试按照入门示例将商店、产品和员工添加到数据库中。我在提交时遇到的异常是:

对象引用未保存的临时实例-在刷新之前保存临时实例。类型:FluentNHibernateTesting.Entities.Employee,实体:FluentNHibernateTesting.Entities.Employee

问题2)如何解决此问题?我理解(从我有限的阅读中)它与正确设置对象关系的级联元素有关,但对于如何使用自动映射有效地实现这一点,我有点困惑

Q3)Fluent项目是否有目标发布日期?我(和我假设的许多其他人一样)觉得这是一个很好的计划,但我会注意使用它,除非它处于稳定状态

Q4)在许多博客中都提到,他们正在以流畅的语言与hbn.xml稳步实现功能的对等。是否有这些缺失功能的列表,以帮助评估和使用此工具

提前感谢你的帮助

是否有一个目标发布日期 流畅的项目?我(像我假设的那样)很多 其他人)觉得这是一个极好的选择 主动性,但我注意使用它 除非它处于稳定状态

您现在应该能够从他们的SVN存储库中获得Fluent nHibernate的工作版本。他们还编译了二进制文件

目前还没有任何Fluent NHibernate的官方版本。这不是质量的反映,而是我们快速变化的反映。我们的代码库每天都在更新,这使得发布官方版本成为一项毫无意义的工作,直到我们实现与NHibernate核心的功能对等为止。您日常使用的大多数常规功能都已准备就绪

目前的问题如下:

他们似乎都不是交易杀手。我想这取决于你要花多少时间做实验

对象引用未保存的瞬态 实例-保存临时实例 冲洗前。类型: FluentNHibernateTesting.Entities.Employee, 实体: FluentNHibernateTesting.Entities.Employee


如果Google对象引用了一个未保存的瞬态实例,您将找到几个与此匹配的实例。你最好的办法就是开始处理这些问题并排除故障。有趣的是,从我所读到的内容来看,错误消息的意思似乎与它所说的完全一致,或者有一种多-多或层叠的关系没有得到更新。

我在给詹姆斯·格雷戈里的电子邮件中直接向他问了同样的问题。他作出了极好的回应

“嘿,保罗

1) KeyColumnNames是您所追求的

2) 你可以用三种方法中的一种。设置IHasManyConvention以全局级联所有关系,使用ForTypesThatDeriveFrom调用或自动映射覆盖

3) 我们现在正在私下测试1.0版本。不确定我们是否会有一个公开测试版或直接发布,但这应该在未来几周内发生

4) 这是非常不可能的,我们将永远是完全功能完整的NHibernate,我们没有愿望。NH的许多特性都非常深奥,实现它们对我们没有什么好处。从1.0开始,我们将很少有不支持人们经常使用的功能。我可以自信地说,所有常见的映射场景都得到了满足,如果有什么不满足的地方,您可以随时返回hbm进行处理

为了避免任何关于我们的文档过时的评论,我们将对文档进行1.0;)的全面检查

詹姆斯的

谢谢你,詹姆斯