У меня есть решение .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 при доступе к строке соединения. У меня нет объяснения, почему это происходит. Я уверен, что это что-то вроде ошибок, я не могу с этим справиться. Я был бы очень признателен, если бы кто-нибудь мог помочь мне здесь. Спасибо за чтение.