代码之家  ›  专栏  ›  技术社区  ›  Pau

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

  •  4
  • Pau  · 技术社区  · 16 年前

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

    为了教育自己,我给自己设置了一个挑战,即尝试“开始第一个项目”( http://wiki.fluentnhibernate.org/show/GettingStartedFirstProject )使用自动映射和约定。我得承认运气不太好。

    总结一下我的步骤:

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

    我还对示例中的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();
    

    然后,我尝试按照入门示例将商店、产品和员工添加到数据库中。我在提交时遇到的异常是:

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

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

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

    3 回复  |  直到 16 年前
        1
  •  1
  •   paul paul    16 年前

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

    “嘿,保罗,

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

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

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

    詹姆斯的

    谢谢你,詹姆斯。

        2
  •  0
  •   Robert Harvey    16 年前

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

    http://fluentnhibernate.org/downloads

    http://code.google.com/p/fluent-nhibernate/issues/list

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

        3
  •  0
  •   Robert Harvey    16 年前

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

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

    推荐文章