Добавления и исправления версии 1.3
Параметры задания команды вынесены из методов Execute в методы SetCommand и SetSpCommand.
Добавлен метод Update.
Расширено применение атрибута MapTypeAttribute.
Добавлена поддержка интерфейса ISupportInitialize.
Добавлен интерфейс IMapSettable.
SetCommand, SetSpCommand
Основные изменения данной версии коснулись класса
DbManager. Из методов
Execute... вынесены параметры, отвечающие за формирование выполняемой команды. Так, если вызов метода
ExecuteScalar ранее выглядел следующим образом
using (DbManager db = new DbManager())
{
return (int)db.ExecuteScalar("SELECT Count(*) FROM Categories");
}
то теперь его вызову должен предшествовать вызов метода
SetCommand или
SetSpCommand:
using (DbManager db = new DbManager())
{
return (int)db
.SetCommand("SELECT Count(*) FROM Categories")
.ExecuteScalar();
}
Старые методы объявлены obsolete и будут удалены в следующей версии библиотеки.
Update
Метод
Update представляет собой обёртку для вызова метода
DbDataAdapter.Update. Для задания команд вставки обновления и удаления используются соответствующие методы
SetInsertCommand,
SetUpdateCommand,
SetDeleteCommand.
using (DbManager db = new DbManager())
{
db
.SetInsertCommand("INSERT statement")
.SetUpdateCommand("UPDATE statement")
.SetDeleteCommand("DELETE statement")
.Update(dataSet);
}
MapTypeAttribute
Данный атрибут обзавёлся набором параметров, которые могут быть переданы конструктору класса, имплементирующего абстрактное свойство. Например:
public abstract class MyBizEntity : BizEntityBase
{
[MapType(typeof(RequiredString), "Description", 20)]
public abstract string Description { get; set; }
}
См. полный пример использования данного атрибута в
документации.
ISupportInitialize
Если класс, участвующий в маппинге реализует интерфейс
ISupportInitialize, то маппер вызовет метод
BeginInit перед началом отображения и
EndInit перед его завершением.
public class InitializedEntity : ISupportInitialize
{
private bool _isBeingMapped;
void ISupportInitialize.BeginInit()
{
_isBeingMapped = true;
}
void ISupportInitialize.EndInit()
{
_isBeingMapped = false;
}
}
IMapSettable
Данный интерфейс имеет всего лишь один метод –
SetField. В процессе отображения поля источника передаются в этот метод одно за другим. Если объект обрабатывает поле самостоятельно, то он должен вернуть
true. В противном случае маппер попытается произвести отображение самостоятельно. Следующий пример демонстрирует применение данного интерфейса для реализации свойства
ID базового класса бизнес объектов:
public abstract class BizEntityBase : IMapSettable
{
private Guid _id;
public Guid ID { get { return _id; } }
bool IMapSettable.SetField(string fieldName, object value)
{
if (string.Compare(fieldName, GetType().Name + "ID") == 0)
{
_id = (Guid)value;
return true;
}
return false;
}
}
Спасибо всем принявшим участие в обсуждение библиотеки.
Отдельное спасибо Андрею Касьянову за ценные замечания и предложения.
30.04.04 06:48: Перенесено из '.NET Projects'