我是 NHibernate 的新手,它的配置方面对我来说似乎总是过于繁重。昨天,我遇到了 Fluent NHibernate 的 Auto Mapping 功能,给我留下了深刻的印象。
为了教育自己,我为自己设定了使用 AutoMappings 和约定尝试“入门第一个项目”(http://wiki.fluentnhibernate.org/show/GettingStartedFirstProject )的挑战。我不得不承认运气不太好。
总结我的步骤:
我在示例中对数据库模式进行了一些小的更改,主要是为了从外键中删除下划线(即 Product_id 到 ProductId),因为这会使它更符合我们的数据库命名标准。
Q1)我尝试使用 ForeignKeyConvention 作为示例编写 IHasManyConvention 实现,但 WithKeyColumn 方法似乎不存在(我认为这是因为我下载了昨天的构建,因此自撰写文章以来设计发生了变化)。我该如何纠正这个问题?
我还对示例中的实体层进行了一些小的更改,因为我认为这会更容易,他们将把 StoresStockedIn 重命名为 Stores (Product.cs) 并将员工重命名为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();
然后,我尝试按照入门示例将商店、产品和员工添加到数据库中。我在 Commit 上遇到的异常是:
对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例。类型:FluentNHibernateTesting.Entities.Employee,实体:FluentNHibernateTesting.Entities.Employee
Q2) 我该如何解决这个问题?我理解(从我有限的阅读中)它与正确设置对象关系的级联元素有关,但我对如何使用自动映射有效地进行此操作有点困惑。
Q3) Fluent 项目是否有目标发布日期?我(就像我假设的许多其他人一样)觉得这是一个很好的举措,但我会注意使用它,除非它处于稳定状态。
Q4)在许多博客中提到,他们正在稳步努力实现 Fluent 与 hbn.xml 的功能相同。是否在某处列出了这些缺失的功能,以帮助评估和使用该工具?
提前感谢帮助。