Fluent NHibernate:在SchemaExport期间不为类生成任何映射



我有一个应用程序与两个数据库交谈,它运行得很好,我的测试通过了,除了当它试图导出当前DB模式时,它在一个块中输出两个DB的所有内容,当它试图验证对象模型/DB模式时,它试图在一个数据库中查找一切,当一个类(这是外部数据,因此外部DB)不应该被映射。我为类提供了一个映射覆盖,以便NH可以正确地从外部DB(它是只读的)加载/使用数据,但是现在当我导出我的模式时,它会尝试制作那个表。

我尝试了IgnoreBase(typeof(Unit)),但这没有效果(而IgnoreBase(typeof(Entity))确实正常工作)。我已经用[SessionFactory(DataGlobals.FOREIGN_DB_FACTORY_KEY)]装饰了自定义存储库方法,其中简单地定义了一个常量字符串用作SessionFactory的键,但我确信如果有什么我需要装饰类(Unit)或传递不同的参数给SchemaExport

public void CanGenerateDatabaseSchema(){ 
var session = NHibernateSession.GetDefaultSessionFactory().OpenSession();
        using (TextWriter stringWriter = new StreamWriter("../../../../db/schema/UnitTestGeneratedSchema.sql"))
        {
            new SchemaExport(configuration).Execute(true, false, false, session.Connection, stringWriter);
        }
}
public void CanConfirmDatabaseMatchesMappings()
    {
        var allClassMetadata = NHibernateSession.GetDefaultSessionFactory().GetAllClassMetadata();
        foreach (var entry in allClassMetadata)
        {
            NHibernateSession.Current.CreateCriteria(entry.Value.GetMappedClass(EntityMode.Poco))
                 .SetMaxResults(0).List();
        }
    }

在Fluent NHibernate中,您可以使用SchemaAction.None来禁用特定表的模式生成。

例子:

public class BankInfoMap : ClassMap<BankInfo>
{
    public BankInfoMap()
    {
        Schema(“viplookups.dbo”);
        Table(“bnkroute”);
        SchemaAction.None();
        Id(x => x.Id).Column(“bnkrouteid”);
        Map(x => x.AbaNumber).Column(“crouting”);
        Map(x => x.Name).Column(“ccompname”);
        Map(x => x.City).Column(“ccity”);
        Map(x => x.State).Column(“cstate”);
        Map(x => x.PhoneNumber).Column(“cphone1″);
    }
}

摘自:http://lostechies.com/rodpaddock/2010/06/29/using-fluent-nhibernate-with-legacy-databases/

最新更新