Исключение Nhibernate и SQLite «Не удается записать в закрытый TextWriter» - PullRequest
1 голос
/ 27 января 2011

Я пытаюсь использовать NHibernate с SQLite для модульного тестирования.Но я продолжаю получать сообщение об ошибке

Исключение ADOException было обработано кодом пользователя во время подготовки INSERT INTO User (Имя_Имя, Фамилия_Имя, Имя_пользователя, Пароль, Электронная почта, Активн.Modified_By) значения (@ p0, @ p1, @ p2, @ p3, @ p4, @ p5, @ p6, @ p7, @ p8, @ p9, @ p10, @ p11);select last_insert_rowid () произошла ошибка

Внутреннее исключение: {"Невозможно записать в закрытый TextWriter."}} 1006 *

Я не знаю, что я делаю неправильно.Вот мой код

public class InMemoryDatabaseTest : IDisposable
{
    private static Configuration Configuration;
    private static ISessionFactory SessionFactory;
    protected ISession session;

    public InMemoryDatabaseTest()
    {
        if (Configuration == null)
        {
            Assembly a = Assembly.Load("Astute.Framework.Data");

            Configuration = new Configuration()
                .SetProperty(Environment.ReleaseConnections, "on_close")
                .SetProperty(Environment.Dialect, typeof(SQLiteDialect).AssemblyQualifiedName)
                .SetProperty(Environment.ConnectionDriver, typeof(SQLite20Driver).AssemblyQualifiedName)
                .SetProperty(Environment.ConnectionString, "data source=:memory:")
                .SetProperty(Environment.ProxyFactoryFactoryClass, typeof(ProxyFactoryFactory).AssemblyQualifiedName)
                .AddAssembly(a);

            SessionFactory = Configuration.BuildSessionFactory();
        }

        session = SessionFactory.OpenSession();

        new SchemaExport(Configuration).Execute(true, true, false, session.Connection, Console.Out);
    }


    public void Dispose()
    {
        session.Dispose();

    }
}

[TestClass]
public class Test : InMemoryDatabaseTest
{
    [TestMethod]
    public void CanSaveUser()
    {
        object id;

        using (var tx = session.BeginTransaction())
        {
            id = session.Save(new User
            {
                FirstName = "Imran",
                LastName = "Ashraf",
                UserName = "imran",
                Password = "Test",
                Email = "Test@test.com",
                IsActive = true,
                DefaultClinicIdentifcationNumber = "",
                LoginIcon = "",
                CreatedBy = 1000000,
                CreatedDate = DateTime.Today,
                ModifiedBy = 1000000,
                ModifiedDate = DateTime.Today
            });

            tx.Commit();
        }

        session.Clear();

    }
}

В этой строке я получаю сообщение об ошибке id = session.Save.Я получил этот пример от http://ayende.com/Blog/archive/2009/04/28/nhibernate-unit-testing.aspx

Есть идеи?Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 26 июля 2011

Сообщение об ошибке "Внутреннее исключение: {" Невозможно записать в закрытый TextWriter. "}" выдается, когда вы пытаетесь записать в Console.Out.

Я создал новый TextWriter и использовал его:

TextWriter writer = null;
new SchemaExport(Configuration).Execute(true, true, false, session.Connection, writer);

Это исправило это исключение.

0 голосов
/ 04 декабря 2013

В моем случае я заметил, что использовал два экземпляра InMemoryDatabaseTest.Я удалил один экземпляр из теста.

0 голосов
/ 28 января 2011

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

Data Source=:memory:;Version=3;New=True;

Вы можете попробовать, чтобы увидеть, решит ли это проблему.Часть New=True; выглядит многообещающе.

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