【问题标题】:How to use fluent Nhibernate components如何使用流畅的 Nhibernate 组件
【发布时间】:2012-03-14 08:56:01
【问题描述】:

我正在尝试在流畅的 nhibernate 中使用组件,但出现以下错误。

FluentNHibernate.Cfg.FluentConfigurationException:创建 SessionFactory 时使用了无效或不完整的配置。查看PotentialReasons 集合和InnerException 了解更多详情。

下面的代码看起来正确还是我遗漏了什么?

下面是我想重用的对象

public class Thickness
{
    public string Name { get; set; }
    public byte ThicknessSize { get; set; }
}

我已经在我的实体类中实现了它,如下所示

public class Liner
{
    public virtual int Id { get; set; }
    public virtual Thickness Thickness { get; set; }
}

实体的地图是

public class LinerMap : ClassMap<Liner>
{
    public LinerMap()
    {
        Table("Liner");
        Id(l => l.Id);
        Component(l => l.Thickness);              
    }
}

配置如下所示

   public static ISessionFactory CreateSessionFactory()
    {

        return Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c
                .Server("XXXXX")
                .Database("XXXXX")
                .Username("XXXXXXXXXX")
                .TrustedConnection()))
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Liner>())
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Thickness>())
            .BuildSessionFactory();
    }

我注意到 fluent wiki 说此功能不适用于自动映射,因此我明确使用了 .mapping 方法,但我不确定这是否足够

欢迎任何想法

GB

【问题讨论】:

  • 您是否查看过 InnerException(可能还有其他 InnerExceptions)?堆栈跟踪中通常隐藏着线索。
  • 还可以描述 Component 方法的作用以及它来自什么命名空间。我没有在ClassMap 文档中看到它。
  • 您丢失了自动映射,因为您使用的是 CLASSMAP。如果你想获得自动映射,你需要使用 OVERRIDES。

标签: fluent-nhibernate fluent fluent-nhibernate-mapping


【解决方案1】:

Component method 做了一些研究,如果您的代码试图使用它的功能,那么它需要另一个参数。我不知道为什么它会编译它的编写方式,但它需要两个参数,一个用于引用属性的参数,另一个描述该引用属性的映射。

【讨论】:

  • 稍后我会更好地了解组件方法。我已经通过fluent wiki,但我会再看一遍,稍后再试。
  • 最后我决定离开组件,只创建不同的实体
猜你喜欢
  • 1970-01-01
  • 2011-05-14
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
相关资源
最近更新 更多