C# 将SimpleDB(与SimpleVant一起)与POCO/现有实体(而不是类上的属性)一起使用

C# 将SimpleDB(与SimpleVant一起)与POCO/现有实体(而不是类上的属性)一起使用,c#,architecture,repository,amazon-web-services,amazon-simpledb,C#,Architecture,Repository,Amazon Web Services,Amazon Simpledb,我试图在我的应用程序中使用SimpleSavant,使用SimpleDB 我目前有(例如) 要使用Simple Savant,我必须将属性放在类声明之上,将属性-[DomainName(“Person”)]放在类之上,将[ItemName]放在Id属性之上 我的所有实体都在一个单独的集合中。 我的数据访问类也有一个单独的程序集,类工厂根据配置选择IRepository(在本例中为IRepository) 我希望能够使用我现有的简单类,而不需要属性等。。 如果我从简单数据库切换到其他数据库,那么我

我试图在我的应用程序中使用SimpleSavant,使用SimpleDB

我目前有(例如)

要使用Simple Savant,我必须将属性放在类声明之上,将属性-[DomainName(“Person”)]放在类之上,将[ItemName]放在Id属性之上

我的所有实体都在一个单独的集合中。 我的数据访问类也有一个单独的程序集,类工厂根据配置选择IRepository(在本例中为IRepository)

我希望能够使用我现有的简单类,而不需要属性等。。 如果我从简单数据库切换到其他数据库,那么我只需要创建一个不同的IRepository实现

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


有更好的方法吗?

您应该查看上的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)));
使用此方法时没有功能限制,因为Savant在内部所有操作中都使用这些ItemMappings。使用此方法理解和设置映射只需要多做一些工作

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

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