3

我想我的應用程序中使用簡單的莎凡特,屬性使用SimpleDB的使用的SimpleDB(與SimpleSavant)與POCO /現有的實體,而不是在我的課

我現在有(例如)

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」)],在Id屬性上添加[ItemName]。

我有我的所有實體在一個單獨的程序集。 我也有我的數據訪問類一個單獨的程序集,和一個類工廠基於配置選擇IRepository(在這種情況下,IRepository

我希望能夠使用我現有的簡單類 - 沒有屬性在屬性等。 如果我切換到簡單的數據庫,其他 - 然後我只需要創建一個不同的實施IRepository。

我應該創建一個「DTO」類的類來映射兩個在一起?

有沒有更好的辦法?

回答

2

您應該查看關於Typeless Operations的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); 
相關問題