将 SimpleDB(与 SimpleSavant)与 POCO/现有实体一起使用,而不是我的类上的属性

发布于 2024-08-23 05:17:53 字数 614 浏览 7 评论 0原文

我正在尝试在我的应用程序中使用 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”类型类来将两者映射在一起吗?

有更好的办法吗?

I'm trying to use Simple Savant within my application, to use SimpleDB

I currently have (for example)

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

To use this with Simple Savant, i'd have to put attributes above the class declaration, and property - [DomainName("Person")] above the class, and [ItemName] above the Id property.

I have all my entities in a seperate assembly.
I also have my Data access classes an a seperate assembly, and a class factory selects, based on config, the IRepository (in this case, IRepository

I want to be able to use my existing simple class - without having attributes on the properties etc..
In case I switch out of simple db, to something else - then I only need to create a different implementation of IRepository.

Should I create a "DTO" type class to map the two together?

Is there a better way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乖乖哒 2024-08-30 05:17:53

您应该查看有关 无类型操作的 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);

You should check out the Savant documentation on Typeless Operations. Typeless operations allow you to interact with Savant using dynamically constructed mappings rather than data/model objects. You could, for example, create a dynamic mapping for your Person class like this:

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)));

There are no functional restrictions when using this method because these ItemMappings are what Savant uses internally for all operations. It just takes a bit more work to understand and setup your mappings with this method.

Here's how you would retrieve a Person object using this method:

Guid personId = Guid.NewGuid();
PropertyValues values = savant.GetAttributes(personMapping, personId);
Person p = PropertyValues.CreateItem(personMapping, typeof(Person), values);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文