Свободный NHibernate: не генерировать сопоставления для класса во время SchemaExport - PullRequest
1 голос
/ 28 октября 2011

У меня есть приложение, обращающееся к двум базам данных, и оно работает нормально, и мои тесты проходят, за исключением случаев, когда он пытается экспортировать текущую схему БД, он выводит все для обеих БД в одном блоке, и когда он пытаетсяпроверяя цепочку объектной модели / схемы БД, она пытается найти в одной базе данных все, когда один класс (который является внешними данными, следовательно, внешней БД) не должен отображаться.Я предоставил переопределение сопоставления для класса, чтобы NH мог правильно загружать / использовать данные из внешней БД (только для чтения), но теперь, когда я экспортирую свою схему, он пытается создать эту таблицу.

Iпробовал 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();
        }
    }

1 Ответ

1 голос
/ 30 октября 2011

В 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/

...