2016-08-09 105 views
0

nach Konzepten von Union Architecture, meine Entitäten (POCO) existieren in inneren Schicht, und es gab keine Abhängigkeit zu einem anderen Projekt oder Bibliotheken.

Ich verwende ArangoDB NoSQL für meine Data Access Layer, und ich habe für die Zuordnung meiner Eigenschaften "ArangoDB Attribut" auf meinen C# Eigenschaften verwenden, um Felder ArangoDD:Design Entities mit Union Architektur Konzepte

zum Beispiel:

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


für dieses Problem habe ich zu Arango.Client Dll !:

enter image description here

referenzieren

Nun, was muss ich für dieses Problem tun? Wie kann ich meine Abhängigkeit entfernen?

kann mir jemand helfen?

Antwort

0

Es ist die Zwiebel-Architektur.

In der Tat sollte Ihre Domain keine Verbindung zur Persistenz haben.

Wie Sie im Diagramm sehen können, ist Persistenz Teil der Infrastrukturschicht. Sie müssen eine Persistency-Schicht erstellen, die sowohl von Ihrem Kernmodell als auch von ArangoDB abhängig ist. Dort könnten Sie mit den ArangoDB-Annotationen versehene Entities erstellen und sie Ihrer Domain zuordnen, oder Sie könnten ein Mapping auf andere Weise bereitstellen, sodass Sie diese Übersetzung zwischen Modellen nicht benötigen.

Die Arbeit mit der Zwiebelarchitektur bringt mehr Arbeit mit sich, besonders bei der Einrichtung eines neuen Projekts, aber es bietet auch viele Vorteile.

+0

danke, ich möchte nicht Ihre erste Lösung verwenden (erstellen Sie eine Persistency-Schicht, die eine Abhängigkeit sowohl zu Ihrem Kernmodell und ArangoDB hat). es sind sehr teuer für mich ... Sekunde Lösung gut scheinen! aber wie mappe ich? Verwenden mit Auto Mapper? Ich nehme an, dass Auto Mapper mein Problem nicht löst? Gibt es etwas mit Namen: ** Proxy Attribut ** ?! Ich bin etwas verwirrt! –

0

Wenn Sie ArangoDB.Client Sie Zuordnungen für Namenskonventionen zusätzlich einstellen, dass ein Attribut für die Teilnehmer angeben

können Sie ändern, wie Default-Identifier-Namenskonvention sind:

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

oder den Klassennamen verwenden :

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

oder für andere Mitglieder:

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

Sie lesen können, wie SharedSetting bei http://arangoclient.net/Document/ArangoDatabase

Notiz zu verwenden, dass ArangoDB.Client nicht ArangoDB 3.0 noch nicht unterstützt. Der Support wird in diesem Monat hinzugefügt werden

+0

danke für die Antwort, aber ich benutze [ArangoDB-NET] (https://github.com/yojimbo87/ArangoDB-NET) Treiber –