J'ai 2 questions liées à Linq à SQL. S'il vous plaît voir l'image ci-dessous pour voir ce que mon modèle ressemble à ce que mon modèle ressemble.
question 1 strong> p> J'essaie de comprendre comment charger le update 1.1: p> J'ai essayé d'utiliser les dataloadoptions comme suit: mais cela ne fonctionne pas, je reçois l'exception suivante sur la ligne 2: p> L'exception est tout à fait -Explanatoire - Le graphique d'objet n'est pas autorisé à être cyclique.
En outre, en supposant que la ligne 2 n'a pas lancé une exception, je suis à peu près sûr que la ligne 3 serait, puisqu'elles sont des touches en double. P> mise à jour 1.2 p>: P> > Ce qui suit ne fonctionne pas non plus (non utilisé en conjonces avec update 1.1 em> ci-dessus): p> Il jette l'exception auto-explicative : P> user.addedbyuser Code> champ sur mon
utilisateur code> classe / table. Ce champ est généré à partir de la relation sur le champ code> user.addedbyuserid code>. La table est auto-référençant et j'essaie de comprendre comment obtenir Linq à SQL pour charger la propriété
user.addedbyUser code> avec impatience, c'est-à-dire chaque fois que tout utilisateur
utilisateur code> est Chargé / récupéré, il doit également récupérer l'utilisateur.addedbyUser et utilisateur.ChangedByUser. Cependant, je comprends que cela pourrait devenir un problème récursif ... p>
System.NotSupportedException occurred
Message="Explicit construction of entity type 'i3t.KpCosting.Shared.Model.User' in query is not allowed."
3 Réponses :
Pas sûr qu'il y a une solution à ce problème avec LINQ à SQL. Si vous utilisez SQL Server 2005, vous pouvez définir une Procurreure (récursive similaire) stockée qui utilise des expressions de table communes pour obtenir le résultat que vous souhaitez, puis exécutez cela à l'aide de DataContext.executequery. P>
Peut-être que vous pourriez essayer de prendre un pas en arrière et de voir ce que vous voulez faire em> avec la relation? Je suppose que vous souhaitez afficher ces informations à l'utilisateur par ex. "Modifié par IAIN GALLOWAY il y a 8 heures". Pourrait quelque chose comme le travail suivant? : - P> var users = from u in db.Users
select new
{
/* other stuff... */
AddedTimestamp = u.AddedTimestamp,
AddedDescription = u.AddedByUser.FullName,
ChangedTimestamp = u.ChangedTimestamp,
ChangedDescription = u.ChangedByUser.FullName
};
Oui, je veux afficher cette information dans mon interface graphique. J'espérais résoudre ce problème sans utiliser de types anonymes. Mais je suppose que c'est un moyen un moyen de résoudre le problème. Mon problème est-il lié à l'incapacité de Linq à SQL pour faire face à de nombreuses relations?
NA, vous pouvez ajouter des champs utilisateur.addeddescription et utilisateur.ChangedDescription à la classe d'utilisateur, puis vous n'auriez pas à utiliser un type anon. Ce n'est pas vraiment rien à voir avec les nombreuses relations (chaque relation dans votre exemple est 1: 1). Si vous écrivez directement votre SQL directement, vous ne voudriez pas avoir toutes les propriétés du LohatByUser (y compris son ajout à l'infini). Vous venez probablement de saisir son nom et / ou quels que soient les détails dont vous avez besoin pour votre vue. IMO c'est un problème o / rm plus général. Je pense que vous auriez le même problème avec L2E ou Hibernate.
Tout type de cycles ne sont tout simplement pas autorisés . Depuis le La meilleure option disponible pour vous consiste à effectuer manuellement le niveau 1 joindre à la table d'utilisateurs pour les enfants et à un type anonyme pour les renvoyer. Désolé, ce n'est pas une solution propre / facile, mais c'est vraiment tout ce qui est disponible jusqu'à présent avec Linq. P> Librewith
ou Associéwith
sont appliqués à chaque type sur le contexte, il n'y a pas de moyen interne pour empêcher une boucle sans fin. Plus précisément, il est juste de confondre sur la manière de créer le SQL car SQL Server n'a pas connectez par code>
et CTES A> sont vraiment passés ce que Linq peut générer automatiquement avec le cadre fourni. P>