Frage

Für einen Teil des Projektes ich gerade arbeite, habe ich einen Satz von vier Tabellen für syndicatable Aktionen. Eine Tabelle ist die abstrakte Basis für die drei anderen, und jede Tabelle wird in meinem EF Modell dargestellt wie folgt:

EF Modell - Aktionen http: // chris. charabaruk.com/system/files/images/EF+Model+Actions.png

Es gibt zwei Probleme, die ich zur Zeit mit diesem gegenüber jedoch. Das erste Problem ist, dass Actor (ein Verweis auf einen User) und Subject (ein Hinweis auf eine Einheit der Klasse mit jeder Art von Aktion zugeordnet) ist in meinen Subklassen, trotz der damit verbundenen Datenbankspalten halten gültigen Schlüssel zu Zeilen in ihrem zugehörigen null Tabellen. Ich kann zwar die Schlüssel über ActorReference bekommen und SubjectReference dies natürlich eine neue EF Kontext Einrichtung erfordert und es für die referenzierte Objekte abfragen (wie Foo Reference.Value ist auch null).

Das zweite Problem ist, dass das wechselseitige Ende der Beziehung zwischen den konkreten Aktionsklassen und die damit verbundenen Entitätsklassen immer nichts auftauchen. Zum Beispiel Task.RelatedActions, die mir alle TaskAction Objekte geben soll, wo Subject auf das jeweilige Aufgabe Objekt verweist, auf dem RelatedActions genannt wird, ist völlig von Objekten frei. Auch hier gilt Zeilen in der Datenbank vorhanden sind, nur Entity Framework ist sie nicht in Objekte und reichte sie mir setzen.

Wer weiß, was es ist, ich falsch mache, und was ich sollte es tun machen arbeiten?

Update: Es scheint, dass keiner der Beziehung Eigenschaften in meinem Entitätsmodell arbeitet nicht mehr, überhaupt nicht. WTF ...

War es hilfreich?

Lösung

Ich denke, das Problem, das Sie hier erleben, dass standardmäßig nicht die EF nicht automatisch kontrollierten Unternehmen laden. Wenn Sie eine Einheit laden, wird die Sammlung oder Verweis auf verbundene Unternehmen leer sein, wenn Sie eine der folgenden Dinge tun:

1) Verwenden Sie eifrig Laden, um Ihre Haupt-Einheit und Ihre damit verbundene Einrichtung in einer einzigen Abfrage abzurufen. Um dies zu tun, ändern Sie Ihre Abfrage durch einen Aufruf an das Verfahren hinzufügen. In Ihrer Probe oben, können Sie die folgende Abfrage verwenden:

from a in context.Actions.Include("Actor") select a

Dies jede der Aktionen mit der zugehörigen Darsteller Methode abrufen würde.

2) Verwenden Sie explizite verzögertes Laden der damit verbundenen Entität abzurufen, wenn Sie es brauchen:

action1.ActorReference.Load()

In der Version des EF, die mit .NET 4.0 ausgeliefert werden, werden Sie auch die folgende zusätzliche Option haben:

Drehen Sie

3) auf implizite verzögertes Laden damit verbundenen Einrichtungen werden automatisch abgerufen werden, wenn Sie die Navigationseigenschaft verweisen.

  • Danny
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top