Вы не хотите делать это в Application_BeginRequest.
Чтобы автоматически генерировать DDL, вам нужно сделать это в ваших классах TDD. Создайте специальный класс, который вы можете вызывать вручную, когда вам нужно сгенерировать DDL для вашей базы данных разработки.
Что-то вроде:
private static void CreateDatabaseFromFluentNHibernateMappings()
{
var mappingAssemblies = RepositoryTestsHelper.GetMappingAssemblies();
SchemaExport schema = new SchemaExport(NHibernateSession.Init(new SimpleSessionStorage(), mappingAssemblies, NHIBERNATE_CFG_XML));
schema.Execute(true, true, false);
}
Это сгенерирует и выполнит DDL на основе ваших сопоставлений с базой данных, которую вы указали в файле конфигурации NHibernate (в NHIBERNATE_CFG_XML). База данных, пусть и пустая, уже должна существовать.
Вы также можете создать другой метод в своем классе, который может обновлять схему базы данных разработки по мере разработки в случае добавления новых объектов, свойств и т. Д.
private static void UpdateExistingDatabaseFromFluentNHibernateMappings()
{
var mappingAssemblies = RepositoryTestsHelper.GetMappingAssemblies();
SchemaUpdate schema = new SchemaUpdate(NHibernateSession.Init(new SimpleSessionStorage(), mappingAssemblies, NHIBERNATE_CFG_XML));
schema.Execute(true, true);
}
Это обновит существующую базу данных с изменениями, которые вы внесли в FNH, не разрушая существующую базу данных. Очень полезно, особенно если у вас уже есть тестовые данные в базе данных.
И, наконец, вы можете использовать NDbUnit для предварительной загрузки базы данных на основе тестовых данных, определенных в XML, в вашем проекте и в SCM. Прекрасно, когда у вас есть команда, работающая с одной и той же базой данных, и вы хотите предварительно загрузить ее данными, поэтому все начинают с одного и того же листа.
Использование NDbUnit:
private static void LoadTheTestDataintoDb()
{
const string connectionstring = // your connection string to your db
NDbUnit.Core.INDbUnitTest sqlDb = new NDbUnit.Core.SqlClient.SqlDbUnitTest(connectionstring);
sqlDb.ReadXmlSchema(/* your XML schema file defining your database (XSD) */);
sqlDb.ReadXml(/* Your XML file that has your test data in it (XML) */);
// Delete all from existing db and then load test data allowing for identity inserts
sqlDb.PerformDbOperation(NDbUnit.Core.DbOperationFlag.CleanInsertIdentity);
}
Для этого необходимо использовать NDbUnit . Спасибо Стивену Болену за это!
Надеюсь, это поможет; Я написал это довольно быстро, поэтому, если я вас запутал, дайте мне знать.