NullReferenceExpection в тестовом проекте интеграции для решения nhibernate asp.net - PullRequest
0 голосов
/ 19 ноября 2010

У меня есть решение .NET 3.5 с проектом asp.net (веб-сайт) с fluentnhibernate и его тестовым проектом (проект библиотеки классов). Я ссылался на проект asp.net в тестовом проекте и со всеми fluentnhibernate / Нибенат дллс.

Что я не могу понять, так это то, что при запуске веб-формы (нажатие браузера), скажем, Test.aspx, создание схемы прошло успешно, и я мог видеть таблицы в моей базе данных. вот метод, который я вызываю на Test.aspx.cs

public partial class Test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ISession session = SessionManager.Instance.OpenSession();
       SessionManager.BuildSchema(session);
    }
}

я использую один и тот же метод в методе CanGenerateSchema моего тестового класса, и он всегда терпит неудачу

 [TestFixture]
public class CanGenerateSchemaTestSuite
{
    [Test]
    public void CanGenarateSchema()
    {
        ISession session = SessionManager.Instance.OpenSession();
        SessionManager.BuildSchema(session);
    }
}

вот SessionManager, который я использую:

public sealed class SessionManager
{
    private readonly ISessionFactory _sessionFactory;


    public static ISessionFactory SessionFactory
    {
        get { return Instance._sessionFactory; }
    }


    private ISessionFactory GetSessionFactory()
    {
        return _sessionFactory;
    }

    public static SessionManager Instance
    {
        get { return NestedSessionManager._sessionManager; }
    }

    public ISession OpenSession()
    {
        return Instance.GetSessionFactory().OpenSession();
    }


    private static Configuration SaveConfigs;

    private SessionManager()
    {
        try
        {

            if (_sessionFactory == null)
            {
            //from the debugging the code breaks from here when trying to get connectionstring.
                string constring = ConfigurationManager.AppSettings["localdb"].ToString();
                FluentConfiguration configuration = Fluently.Configure()
                    .Database(
                        MsSqlConfiguration.MsSql2005.ConnectionString(constring))
                    .Mappings(m =>
                    {
                        m.FluentMappings.AddFromAssemblyOf<myproject.model.Request>();
                        m.FluentMappings.AddFromAssemblyOf<myproject.model.Route>();
                    })
                    .ExposeConfiguration((x) =>
                    {
                        SaveConfigs = x;
                        x.SetProperty("current_session_context_class", "thread_static");

                    });
                _sessionFactory = configuration.BuildSessionFactory();
            }
        }
        catch (Exception ex)
        {
            Console.Write(ex.Message);

        }

    }


    public static void BuildSchema(ISession session)
    {
        var export = new SchemaExport(SaveConfigs);
        export.Execute(false,true,false,session.Connection,null);
    }

    class NestedSessionManager
    {
        internal static readonly SessionManager _sessionManager = new SessionManager();
    }
}

Итак, из моего комментария возникает исключение NullReferenceException при доступе к строке соединения. У меня нет объяснения, почему это происходит. Я уверен, что это что-то вроде ошибок, я не могу с этим справиться. Я был бы очень признателен, если бы кто-нибудь мог помочь мне здесь. Спасибо за чтение.

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

ConfigurationManager.AppSettings["localdb"] из Test.aspx будет извлекать из вашего web.config файла в веб-проекте.

Этот файл не будет доступен для вашего тестового проекта (я предполагаю, что ваши тесты находятся в отдельном проекте от вашего веб-сайта). Вы сможете обойти это, добавив файл app.config в ваш тестовый проект с правильными настройками localdb или вместо использования строки конфигурации, используйте Fluent Builder FluentNHibernate.

Пример файла app.config:

<?xml version="1.0"?>
<configuration>
 <appSettings>
   <add key="localdb" value="yourconnectionstring" />
 </appSettings>
</configuration>
0 голосов
/ 19 ноября 2010

Если значение, возвращаемое ConfigurationManager.AppSettings["localdb"], равно null, то вызов .ToString() вызовет NullReferenceException.

. Убедитесь, что параметр localdb существует.

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