2016-08-09 42 views
0

根據Union Architecture的概念,我的實體(POCO)存在於內層,並且它不依賴於另一個項目或庫。

我使用ArangoDB的NoSql我的數據訪問層,我不得不使用「ArangoDB屬性」在我的C#屬性映射我的屬性ArangoDD領域:具有聯合體繫結構概念的設計實體

例如:

public class User 
{ 
    [AliasField("_key")] 
    public string Id { get; set; } 
} 


對於這個問題,我不得不提及的Dll Arango.Client !:

enter image description here

現在,我必須爲這個問題做些什麼?我怎樣才能刪除我的依賴?

任何人都可以幫助我嗎?

回答

0

這是洋蔥架構。

確實,您的域名不應該有任何連接持久性。

正如您在圖中所看到的,持久性是基礎架構層的一部分。 您必須創建一個對核心模型和ArangoDB都有依賴關係的持久層。 您可以創建使用ArangoDB批註註釋的實體並將它們映射到您的域,或者您可以以另一種方式提供映射,因此您不需要在模型之間進行此翻譯。

與洋蔥建築一起工作帶來了更多的工作,尤其是在建立新項目時,但它也提供了許多好處。

+0

謝謝,我不想使用你的第一個解決方案(創建一個對你的核心模型和ArangoDB有依賴關係的持久層),它對我來說花費很大......第二個解決方案好似乎!但我如何做映射?與Auto Mapper一起使用?我猜Auto Mapper不能解決我的問題?是否有任何名稱:**代理屬性** ?!我有點困惑! –

0

如果使用ArangoDB.Client您可以在另外的命名約定設置映射到指定的類成員屬性

,您可以更改默認的標識符命名約定如何:

sharedSetting.Collection.ChangeIdentifierDefaultName(IdentifierType.Key, "Id"); 

或使用類名:

// this will resolve `UserId` => `_key` 
sharedSetting.Collection.ChangeIdentifierDefaultName(IdentifierType.Key, (m) => $"{m.Name}Id"); 

或用於其他成員:

sharedSetting.Collection.ChangeDocumentPropertyForType<User>(u => u.Id, p => 
{ 
    p.PropertyName = "_key"; 
}); 

你可以閱讀有關如何在http://arangoclient.net/Document/ArangoDatabase

注意ArangoDB.Client不支持ArangoDB 3.0尚未使用SharedSetting。本月會添加支持

+0

感謝您的回答,但我使用[ArangoDB-NET](https://github.com/yojimbo87/ArangoDB-NET)驅動程序 –