Fluent nhibernate 使用FluentMapping自动映射不需要';似乎对我不太管用

Fluent nhibernate 使用FluentMapping自动映射不需要';似乎对我不太管用,fluent-nhibernate,Fluent Nhibernate,我是n00b。以下是我想做的: 使用自动映射来配置模型->表之间的每个属性。然后,我想覆盖fluent map中的两个特定项。这两项是:Id和表名 我的地图是这样的: public class BillMasterMap : ClassMap<BillMaster> { public BillMasterMap() { Table("BILLMAST"); Id(x => x.SYSKEY); } } public st

我是n00b。以下是我想做的:

使用自动映射来配置模型->表之间的每个属性。然后,我想覆盖fluent map中的两个特定项。这两项是: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;
    }
公共类BillMasterMap:ClassMap
{
公共BillMasterMap()
{
表(“BILLMAST”);
Id(x=>x.SYSKEY);
}
}
我的出厂设置如下所示:

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;
    }
公共静态ISessionFactory会话工厂(字符串连接字符串)
{
if(_sessionFactory==null)
{
_sessionFactory=fluntly.Configure()
.Database(MsSqlConfiguration.MsSql2005.ShowSql()
.ConnectionString(c=>c.Is(ConnectionString)).Cache(c=>c.UseQueryCache().ProviderClass())
.Mappings(m=>
m、 AutoMappings.Add(AutoMap.AssemblyOf())
.Where(x=>x.Namespace.EndsWith(“实体”))
.Mappings(m=>
m、 FluentMappings.AddFromAssemblyOf())
.BuildSessionFactory();
}
返回工厂;
}
问题是FNH找到了BillMaster的Id覆盖,但没有找到BillInvoice的Id覆盖,看起来是这样的(看起来完全相同)

公共类BillInvoiceMap:ClassMap
{
公共BillInvoiceMap()
{
Id(x=>x.SYSKEY);
表(“BILLINV”);
}
}
我通过使用Setup()配置自动映射解决了这个问题,如下所示:

 .Mappings(m => 
                    m.AutoMappings.Add(AutoMap.AssemblyOf<BillMaster>()
                                .Setup(s => s.FindIdentity = property => property.Name == "SYSKEY")            
                                .Where(x => x.Namespace.EndsWith("Entities"))))
.Mappings(m=>
m、 AutoMappings.Add(AutoMap.AssemblyOf())
.Setup(s=>s.FindIdentity=property=>property.Name==“SYSKEY”)
.Where(x=>x.Namespace.EndsWith(“实体”))
但是我想结合auto和fluent,因为其他表不使用“SYSKEY”作为它们的Id列

想法?这是一个FNH错误吗?

让它工作起来了

1.)我必须使用上述设置方法设置自动映射 2.)此外,我必须使用Id方法设置fluentmappings

当这两个都是这样设置的时候,它对我来说是有效的

所以

公共静态ISessionFactory会话工厂(字符串连接字符串)
{
if(_sessionFactory==null)
{
_sessionFactory=fluntly.Configure()
.Database(MsSqlConfiguration.MsSql2005.ShowSql()
.ConnectionString(c=>c.Is(ConnectionString)).Cache(
c=>c.UseQueryCache().ProviderClass())
.Mappings(m=>
{
m、 FluentMappings.AddFromAssemblyOf();
m、 AutoMappings.Add(AutoMap.AssemblyOf())
.Setup(s=>s.FindIdentity=property=>property.Name==“SYSKEY”)
.Where(x=>x.Namespace.EndsWith(“实体”);
})
.BuildSessionFactory();
}
返回工厂;
}
地图呢

 public class BillInvoiceMap : ClassMap<BillInvoice>
{
    public BillInvoiceMap()
    {
        Table("BILLINV");
        Id(x => x.SYSKEY);
    }
}
公共类BillInvoiceMap:ClassMap
{
公共BillInvoiceMap()
{
表(“BILLINV”);
Id(x=>x.SYSKEY);
}
}
让它工作起来了

1.)我必须使用上述设置方法设置自动映射 2.)此外,我必须使用Id方法设置fluentmappings

当这两个都是这样设置的时候,它对我来说是有效的

所以

公共静态ISessionFactory会话工厂(字符串连接字符串)
{
if(_sessionFactory==null)
{
_sessionFactory=fluntly.Configure()
.Database(MsSqlConfiguration.MsSql2005.ShowSql()
.ConnectionString(c=>c.Is(ConnectionString)).Cache(
c=>c.UseQueryCache().ProviderClass())
.Mappings(m=>
{
m、 FluentMappings.AddFromAssemblyOf();
m、 AutoMappings.Add(AutoMap.AssemblyOf())
.Setup(s=>s.FindIdentity=property=>property.Name==“SYSKEY”)
.Where(x=>x.Namespace.EndsWith(“实体”);
})
.BuildSessionFactory();
}
返回工厂;
}
地图呢

 public class BillInvoiceMap : ClassMap<BillInvoice>
{
    public BillInvoiceMap()
    {
        Table("BILLINV");
        Id(x => x.SYSKEY);
    }
}
公共类BillInvoiceMap:ClassMap
{
公共BillInvoiceMap()
{
表(“BILLINV”);
Id(x=>x.SYSKEY);
}
}