使用FluentMapping进行AutoMapping似乎对我不起作用

时间:2010-03-26 14:53:54

标签: fluent-nhibernate

我是n00b。这就是我想要做的事情:

使用AutoMapping配置模型之间的每个属性 - >表。然后我想在流利的地图中覆盖2个特定项目。这两个项目是:Id&表名。

所以我的地图看起来像这样:

public class BillMasterMap : ClassMap<BillMaster>
{
    public BillMasterMap()
    {
        Table("BILLMAST");
        Id(x => x.SYSKEY);
    }
}

我的出厂设置如下:

public static ISessionFactory SessionFactory(string connectionString)
    {
        if (_sessionFactory == null)
        {
            _sessionFactory = Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2005.ShowSql()
                        .ConnectionString(c => c.Is(connectionString)).Cache(c => c.UseQueryCache().ProviderClass<HashtableCacheProvider>()))
                .Mappings(m => 
                    m.AutoMappings.Add(AutoMap.AssemblyOf<BillMaster>()
                                .Where(x => x.Namespace.EndsWith("Entities"))))
                .Mappings(m => 
                    m.FluentMappings.AddFromAssemblyOf<BillInvoiceMap>())
                .BuildSessionFactory();
        }

        return _sessionFactory;
    }

问题是FNH找到BillMaster的Id覆盖,但不是BillInvoice看起来像这样(看起来一样)

public class BillInvoiceMap : ClassMap<BillInvoice>
{
    public BillInvoiceMap()
    {
        Id(x => x.SYSKEY);
        Table("BILLINV");
    }
}

我通过使用Setup()配置自动化来解决问题,如下所示:

 .Mappings(m => 
                    m.AutoMappings.Add(AutoMap.AssemblyOf<BillMaster>()
                                .Setup(s => s.FindIdentity = property => property.Name == "SYSKEY")            
                                .Where(x => x.Namespace.EndsWith("Entities"))))

但我想结合汽车和放大器流畅,因为其他表不使用“SYSKEY”作为他们的Id列。

思考?这是一个FNH错误吗?

1 个答案:

答案 0 :(得分:0)

搞定了。

1。)我必须使用上面描述的Setup方法设置AutoMapping 2.)此外,我必须使用Id方法

设置流畅的映射

当两者都设置为这样时,它对我有用。

所以

public static ISessionFactory SessionFactory(string connectionString)
    {
        if (_sessionFactory == null)
        {
            _sessionFactory = Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2005.ShowSql()
                              .ConnectionString(c => c.Is(connectionString)).Cache(
                              c => c.UseQueryCache().ProviderClass<HashtableCacheProvider>()))
                .Mappings(m =>
                              {
                                  m.FluentMappings.AddFromAssemblyOf<BaseEntity>();
                                  m.AutoMappings.Add(AutoMap.AssemblyOf<BaseEntity>()
                                                         .Setup(s => s.FindIdentity = property => property.Name == "SYSKEY")
                                                         .Where(x => x.Namespace.EndsWith("Entities")));

                              })
                .BuildSessionFactory();
        }

        return _sessionFactory;
    }

地图

 public class BillInvoiceMap : ClassMap<BillInvoice>
{
    public BillInvoiceMap()
    {
        Table("BILLINV");
        Id(x => x.SYSKEY);
    }
}