Ich habe 2 verwandte Linq to SQL Fragen. Bitte sehen Sie das Bild unten, um zu sehen, wie mein Modell aussieht.
Frage 1
Ich versuche herauszufinden, wie man die User.AddedByUser
Feld auf meinem User
Klasse/Tisch. Dieses Feld wird aus der Beziehung auf der Registerkarte User.AddedByUserId
Bereich. Die Tabelle ist selbstreferenzierend, und ich versuche herauszufinden, wie ich Linq to SQL dazu bringe, die Tabelle zu laden. User.AddedByUser
Eigenschaft eifrig, d.h. immer wenn eine User
Entität geladen/abgeholt wird, muss es auch die User.AddedByUser und User.ChangedByUser abholen. Ich verstehe jedoch, dass dies ein rekursives Problem werden könnte...
Aktualisierung 1.1:
Ich habe versucht, die DataLoadOptions wie folgt zu verwenden:
var options = new DataLoadOptions();
options.LoadWith<User>(u => u.ChangedByUser);
options.LoadWith<User>(u => u.AddedByUser);
db = new ModelDataContext(connectionString);
db.LoadOptions = options;
Aber das funktioniert nicht, ich erhalte die folgende Ausnahme in Zeile 2:
System.InvalidOperationException occurred
Message="Cycles not allowed in LoadOptions LoadWith type graph."
Source="System.Data.Linq"
StackTrace:
at System.Data.Linq.DataLoadOptions.ValidateTypeGraphAcyclic()
at System.Data.Linq.DataLoadOptions.Preload(MemberInfo association)
at System.Data.Linq.DataLoadOptions.LoadWith[T](Expression`1 expression)
at i3t.KpCosting.Service.Library.Repositories.UserRepository..ctor(String connectionString) in C:\Development\KP Costing\Trunk\Code\i3t.KpCosting.Service.Library\Repositories\UserRepository.cs:line 15
InnerException:
Die Ausnahme ist ziemlich selbsterklärend - der Objektgraph darf nicht zyklisch sein. Wenn Zeile 2 keine Ausnahme auslöst, bin ich mir ziemlich sicher, dass dies auch bei Zeile 3 der Fall ist, da es sich um doppelte Schlüssel handelt.
Aktualisierung 1.2 :
Das folgende funktioniert ebenfalls nicht (nicht in Verbindung mit Aktualisierung 1.1 oben):
var query = from u in db.Users
select new User()
{
Id = u.Id,
// other fields removed for brevityy
AddedByUser = u.AddedByUser,
ChangedByUser = u.ChangedByUser,
};
return query.ToList();
Er löst die folgende, selbsterklärende Ausnahme aus:
System.NotSupportedException occurred
Message="Explicit construction of entity type 'i3t.KpCosting.Shared.Model.User' in query is not allowed."
Ich bin jetzt wirklich ratlos, wie ich das Problem lösen kann. Bitte helfen Sie!
Frage 2
Auf jeder anderen Tabelle in meiner DB, und daher Linq to SQL-Modell, habe ich zwei Felder, Entity.ChangedByUser
(verlinkt mit Entity.ChangedByUserId
Fremdschlüssel/Verknüpfung) und Entity.AddedByUser
(verlinkt mit Entity.AddedByUserId
Fremdschlüssel/Verwandtschaft)
Wie bringe ich Linq to SQL dazu, diese Felder eifrig für mich zu laden? Muss ich eine einfache Verknüpfung meiner Abfragen durchführen oder gibt es eine andere Möglichkeit?