Вот функция псевдокода, которая интерполирует линейно между 2 цветами (staying in RGB space
). Я использую класс Color для ясности здесь.
bAmount находится между 0 и 1 (для интерполяции)
Color interpolate(Color colorA, Color colorB, float bAmount) {
Color colorOut;
float aAmount = 1.0 - bAmount;
colorOut.r = colorA.r * aAmount + colorB.r * bAmount;
colorOut.g = colorA.g * aAmount + colorB.g * bAmount;
colorOut.b = colorA.b * aAmount + colorB.b * bAmount;
return colorOut;
}
Взгляните на RhinoCommons . В Rhino.Commons.ForTesting, в UnitOfWorkTestContextDbStrategy.cs , Айенде выполнил там некоторую процедуру, которая создает базы данных.
Я думаю, что создание базы данных с NHibernate - это хорошо, если вы начнете разрабатывать приложение с моделью предметной области. Я имею в виду - это дает представление о том, как должна выглядеть ваша база данных. Но в целом - надо использовать sql скрипты.
Я слышал, что некоторые разработчики используют генерацию базы данных NHibernate для интеграционных тестов, они создают легкую базу данных sqlite на лету.
Как сгенерировать базу данных с помощью NHibernate? Вот как я это делаю:
public static void InitSessionFactory()
{
var connectionString =
ConfigurationManager
.ConnectionStrings["MyConnectionString"]
.ConnectionString;
var cfgFromXml = new Configuration();
cfgFromXml.Configure();
var cfg = Fluently.Configure(cfgFromXml)
.Database(MsSqlConfiguration.MsSql2005
.ConnectionString(x => x.Is(connectionString))
.UseReflectionOptimizer())
.Mappings(x => x.FluentMappings
.AddFromAssemblyOf<NHibernateBootstrapper>())
.ExposeConfiguration(BuildSchema);
ObjectFactory.Inject(cfg.BuildSessionFactory());
}
private static void BuildSchema(Configuration config)
{
//Creates database structure
//new SchemaExport(config)
// .Create(false, true);
}
Мы используем SchemaExport для предоставления схемы и задачи Nant для удаления и воссоздания базы данных. Другая задача Nant выполняет экспорт схемы и код загрузки данных, который существует в форме интеграционного теста, запускаемого задачей nunit. Здесь есть образец .
Нет, NHibernate не будет создавать базу данных за вас. Создание баз данных - это то, что вы обычно не хотите делать на лету. Для этого требуется множество параметров конфигурации, и это очень зависит от базы данных, даже от версии базы данных.
Для нашего продукта я написал класс, который настраивает базу данных. Он используется для установщика, интеграционных тестов и инструмента обслуживания базы данных.
Существует также особый случай, когда заказчик не хочет предоставлять право на создание базы данных. Затем мы ожидаем, что он это сделает, и пропустим эту часть.
Хм, вы действительно можете использовать SchemaExport, как вы упомянули, но я рассматриваю NHibernate в первую очередь как способ преодолеть разрыв между моделью предметной области и реляционным постоянным хранилищем. То есть для меня цель NHibernate - сохранять и извлекать объекты в моей модели домена.
Когда вы хотите обновлять схему, imho, вы не должны использовать NHibernate (если это вообще возможно), поскольку это не цель NHibernate. ; есть «предметно-ориентированный язык» под названием SQL :), который хорошо справляется с этими задачами.
Для создания моей базы данных и обновления схемы базы данных я использую Migrator.NET , который это фреймворк, который позволяет писать классы C #, в которых вы указываете, что нужно сделать (создать таблицу, добавить столбец и т. д.).
Преимущество этого состоит в том, что Migrator.NET также поддерживает несколько СУБД, поэтому вам не придется писать код SQL для конкретной базы данных.