3

我正在尝试在我的应用程序中使用 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

我希望能够使用我现有的简单类 - 没有属性等属性。如果我从简单 db 切换到其他东西 - 那么我只需要创建 IRepository 的不同实现。

我应该创建一个“DTO”类型类来将两者映射在一起吗?

有没有更好的办法?

4

1 回答 1

2

您应该查看有关无类型操作的 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 是 Savant 在内部用于所有操作的。使用这种方法理解和设置映射只需要更多的工作。

以下是使用此方法检索 Person 对象的方法:

Guid personId = Guid.NewGuid();
PropertyValues values = savant.GetAttributes(personMapping, personId);
Person p = PropertyValues.CreateItem(personMapping, typeof(Person), values);
于 2010-02-25T02:44:34.640 回答