Использование SimpleDB (с SimpleSavant) с POCO / существующими объектами, а не с атрибутами в моих классах - PullRequest
3 голосов
/ 24 февраля 2010

Я пытаюсь использовать Simple Savant в своем приложении, чтобы использовать SimpleDB

У меня сейчас (например)

public class Person
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public DateTime DateOfBirth { get; set; }
}

Чтобы использовать это с Simple Savant, мне нужно поместить атрибуты над объявлением класса, а свойство - [DomainName ("Person")] над классом и [ItemName] над свойством Id.

У меня все мои сущности в отдельной сборке. У меня также есть свои классы доступа к данным и отдельная сборка, и фабрика классов выбирает, на основе конфигурации, IRepository (в данном случае IRepository

Я хочу иметь возможность использовать свой существующий простой класс - без атрибутов в свойствах и т. Д. В случае, если я переключаюсь с простой базы данных на что-то другое - мне нужно только создать другую реализацию IRepository.

Должен ли я создать класс типа "DTO", чтобы сопоставить их вместе?

Есть ли лучший способ?

1 Ответ

2 голосов
/ 25 февраля 2010

Вам следует ознакомиться с документацией Savant по Операции без ввода текста . Операции без типов позволяют взаимодействовать с Savant, используя динамически построенные отображения, а не объекты данных / модели. Например, вы можете создать динамическое отображение для вашего класса Person следующим образом:

ItemMapping personMapping = ItemMapping.Create("Person", AttributeMapping.Create("Id", typeof (Guid)));
personMapping.AttributeMappings.Add(AttributeMapping.Create("Name", typeof (string)));
personMapping.AttributeMappings.Add(AttributeMapping.Create("Description", typeof(string)));
personMapping.AttributeMappings.Add(AttributeMapping.Create("DateOfBirth", typeof(DateTime)));

Нет никаких функциональных ограничений при использовании этого метода, потому что эти ItemMappings - то, что Савант использует внутренне для всех операций. Это займет немного больше работы, чтобы понять и настроить ваши отображения с помощью этого метода.

Вот как вы можете получить объект Person, используя этот метод:

Guid personId = Guid.NewGuid();
PropertyValues values = savant.GetAttributes(personMapping, personId);
Person p = PropertyValues.CreateItem(personMapping, typeof(Person), values);
...