Интеграционные тесты с nHibernate - PullRequest
0 голосов
/ 18 мая 2018

Хорошо, вот в чем дело.

У меня есть проект webApi в ASP.NET Core, который ссылается на проект int .NET Framework с nHibernate.

Я хочу разработать некоторые интеграционные тесты, ноЯ не могу понять, как подключить драйвер SQLite.

У меня получилось что-то вроде этого:

Configuration = new NHibernate.Cfg.Configuration();

IDictionary<string, string> properties = new Dictionary<string, string>
{
    // Setup database connection
    {NHibernate.Cfg.Environment.ConnectionProvider, "NHibernate.Connection.DriverConnectionProvider"},
    {NHibernate.Cfg.Environment.Dialect, "NHibernate.Dialect.SQLiteDialect"},
    {NHibernate.Cfg.Environment.ConnectionDriver, "MilestoneTG.NHibernate.Driver.Sqlite.Microsoft.MicrosoftSqliteDriver, MilestoneTG.NHibernate.Driver.Sqlite.Microsoft"},
    {NHibernate.Cfg.Environment.ConnectionString, "Data Source=:memory:;New=True;"},
    {NHibernate.Cfg.Environment.Isolation, "ReadCommitted"},
    {NHibernate.Cfg.Environment.CurrentSessionContextClass, "call"}
};

Configuration.AddProperties(properties);

Configuration.AddAssembly(typeof(NHibernateConfiguration).Assembly);


var export = new SchemaExport(Configuration);
export.Execute(true, true, false);

SessionFactory = Configuration.BuildSessionFactory();

SchemaExport.Execute () выдает исключение, сообщающее, чтоДиалект SQLite не может иметь дело с DbType.DateTimeOffset.

Естественным выходом из этого было бы использование пользовательского соглашения, но я не могу этого сделать, потому что это ядро ​​asp.net: /

Все отображения хранятся вфайлы hbm.xml.Я не могу изменить конфигурацию nHibernate.Я должен придерживаться ядра asp.net.

Кроме того, только один класс использует DateTimeOffset, и он довольно затратный, но я не могу найти способ импортировать все другие классы, кроме этого.

Есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 18 мая 2018

Я сделал это, чтобы работать.Не элегантно, но все же.

Как я упоминал ранее, был один класс, который был проблематичным из-за свойства DateTimeOffset.

Одним из вариантов было избавиться от этого класса из модели.

Я не мог использовать метод AddClass () для добавления всех классов, но этот, потому что соглашение об именах не было сохранено.Итак, я нашел обходной путь:

Я перебрал все классы (кроме проблемного) и создал имена файлов "* .hbm.xml" для каждого из них, а затем использовал метод AddResource ()добавить каждый файл в конфигурацию.

foreach (var type in assembly.GetTypes().Where(t => typeof(BaseModel).IsAssignableFrom(t) && t.Name != nameof(ProblematicType) && !t.IsAbstract))
{
    var mappingName = string.Join(".", type.Namespace.Replace("Model", "DataMapping"), type.Name) + ".hbm.xml";
    configuration.AddResource(mappingName, assembly);
}

Это выглядело бы примерно так (я пропустил строки, специфичные для проекта).

Я знаю, что это, вероятно, не лучший способ сделать это, иконечно, это не решает проблему с корнем, но работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...