1

J'ai SP assez complexe qui renvoie la classe de base (basecontent). J'ai hérité avec environ 30+ classes d'enfants (comme "page", "nouvelles", etc).Renvoyer la classe de base dans LINQ pour la procédure stockée provoque stackoverflow

Quand je retourne d'autres types de SP tout fonctionne bien, mais celui-ci me rend fou. Je suis assez expérimenté avec LINQ et j'ai déjà essayé de recréer SP, outout vérifié, etc. Mais cet appel échoue à l'exception Stackoverflow même lorsque le nombre de lignes retournées est nul. J'ai une solution de contournement - quand je le rejoins avec une autre table, qui a des statistiques sur le contenu et ne possède aucun héritage, que je peux aller à la table de contenu en utilisant C# et prendre des données, pour moi. Jusqu'ici, ma principale hypothèse est que quelque chose ne va pas avec ma cartographie d'héritage. Voici xml pour cette classe:

<Table Name="dbo.baseContent" Member="baseContents"> 
    <Type Name="baseContent" Id="ID50" InheritanceCode="1" IsInheritanceDefault="true"> 
     <Column Name="Id" Type="System.Int64" DbType="BigInt NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" /> 
     <Column Name="Type" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" IsDiscriminator="true" /> 
     <Column Name="Status" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" /> 
     <Column Name="UniqueId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" /> 
     <Column Name="LastChanged" Member="LastChangedUTC" Storage="_LastChanged" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" UpdateCheck="Never" /> 
     <Column Name="Title" Modifier="Virtual" Type="System.String" DbType="NVarChar(255) NOT NULL" CanBeNull="false" /> 
     <Column Name="Version" Type="System.Int64" DbType="Bigint" CanBeNull="true" UpdateCheck="Never" /> 
     <Column Name="Tags" Type="System.String" DbType="NVarchar(255)" CanBeNull="false" /> 
     <Column Name="baseOwnerId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="true" /> 
     <Column Name="Views" Type="System.Int32" DbType="int" CanBeNull="false" /> 
     <Column Name="VotesValue" Type="System.Int32" DbType="int" CanBeNull="true" /> 
     <Column Name="Clicks" Type="System.Int32" DbType="int" CanBeNull="true" UpdateCheck="Never" /> 
     <Column Name="IsHidden" Type="System.Boolean" DbType="bit" CanBeNull="false" /> 
     <Column Name="IsFeatured" Type="System.Boolean" DbType="bit" CanBeNull="false" /> 
     <Column Name="IsAdvertising" Type="System.Boolean" DbType="bit" CanBeNull="false" /> 
     <Column Name="LoyaltyPoints" Type="System.Int32" DbType="int" CanBeNull="true" /> 
     <Column Name="CreatedDate" Type="System.DateTime" DbType="datetime" CanBeNull="true" /> 
     <Column Name="ViewsDetails" Type="System.Int32" DbType="int" CanBeNull="true" UpdateCheck="Never" /> 
     <Association Name="baseContent_baseDictionary" Member="baseDictionary" Storage="_baseDictionaries" ThisKey="Id" OtherKey="ContentId" Type="baseDictionary" Cardinality="One" /> 
     <Association Name="baseContent_tTopic" Member="tTopic" ThisKey="Id" OtherKey="ContentId" Type="tTopic" Cardinality="One" /> 
     <Association Name="baseContent_baseFile" Member="baseFile" Storage="_baseFiles" ThisKey="Id" OtherKey="ContentId" Type="baseFile" Cardinality="One" /> 
     <Association Name="baseContent_tLink" Member="tLink" ThisKey="Id" OtherKey="ContentId" Type="tLink" Cardinality="One" /> 
     <Association Name="baseContent_tNews" Member="tNews" ThisKey="Id" OtherKey="ContentId" Type="tNews" Cardinality="One" /> 
     <Association Name="baseContent_tModule" Member="tModule" ThisKey="Id" OtherKey="ContentId" Type="tModule" Cardinality="One" /> 
     <Association Name="baseContent_tPage" Member="tPage" ThisKey="Id" OtherKey="ContentId" Type="tPage" Cardinality="One" /> 
     <Association Name="baseContent_tOwner" Member="tOwner" Storage="_tOwners" ThisKey="Id" OtherKey="ContentId" Type="tOwner" Cardinality="One" /> 
     <Association Name="baseContent_tMessage" Member="tMessage" ThisKey="Id" OtherKey="ContentId" Type="tMessage" Cardinality="One" /> 
     <Association Name="baseContent_tTheme" Member="tTheme" Storage="_tTemplates" ThisKey="Id" OtherKey="ContentId" Type="tTheme" Cardinality="One" /> 
     <Association Name="baseContent_Tags_baseContent" Member="Tags_baseContents" ThisKey="Id" OtherKey="ContentId" Type="Tags_baseContent" /> 
     <Association Name="baseContent_tGoodie" Member="tGoodie" ThisKey="Id" OtherKey="ContentId" Type="tGoodie" Cardinality="One" /> 
     <Association Name="baseContent_tModuleSkin" Member="tModuleSkin" ThisKey="Id" OtherKey="ContentId" Type="tModuleSkin" Cardinality="One" /> 
     <Association Name="baseContent_tLocation" Member="tLocation" ThisKey="Id" OtherKey="ContentId" Type="tLocation" Cardinality="One" /> 
     <Association Name="baseContent_tEvent" Member="tEvent" ThisKey="Id" OtherKey="ContentId" Type="tEvent" Cardinality="One" /> 
     <Association Name="baseContent_tThread" Member="tThread" ThisKey="Id" OtherKey="ContentId" Type="tThread" Cardinality="One" /> 
     <Association Name="baseContent_tThread1" Member="RelatedThreads" Storage="_RelatedThread" ThisKey="Id" OtherKey="RelatedContentId" Type="tThread" /> 
     <Association Name="baseContent_ContentVisit" Member="ContentVisit" Storage="_ContentVisits" ThisKey="Id" OtherKey="ContentId" Type="ContentVisit" Cardinality="One" /> 
     <Association Name="baseContent_tThreadAnswer" Member="tThreadAnswer" ThisKey="Id" OtherKey="ContentId" Type="tThreadAnswer" Cardinality="One" /> 
     <Type Name="baseRole" Id="ID51" InheritanceCode="2" /> 
     <Type Name="baseFolder" Id="ID52" InheritanceCode="3" /> 
     <Type Name="TopicContent" Id="ID53" InheritanceCode="5" /> 
     <Type Name="TopicPageContent" Id="ID54" InheritanceCode="6" /> 
     <Type Name="baseDictionaryContent" Id="ID55" InheritanceCode="7" /> 
     <Type Name="FileContent" Id="ID56" InheritanceCode="8" /> 
     <Type Name="TopicPlaceholderContent" Id="ID57" InheritanceCode="9" /> 
     <Type Name="TopicModuleContent" Id="ID58" InheritanceCode="10" /> 
     <Type Name="TopicLinkContent" Id="ID59" InheritanceCode="11" /> 
     <Type Name="TopicPageLayoutContent" Id="ID60" InheritanceCode="12" /> 
     <Type Name="TopicThemeContent" Id="ID61" InheritanceCode="13" /> 
     <Type Name="TopicNewsContent" Id="ID62" InheritanceCode="14" /> 
     <Type Name="TopicMessageContent" Id="ID63" InheritanceCode="15" /> 
     <Type Name="TopicOfferContent" Id="ID64" InheritanceCode="16" /> 
     <Type Name="TopicVoteUpContent" Id="ID65" InheritanceCode="17" /> 
     <Type Name="TopicVoteDownContent" Id="ID66" InheritanceCode="18" /> 
     <Type Name="TopicOwnerContent" Id="ID67" InheritanceCode="19" /> 
     <Type Name="TopicModuleTypeContent" Id="ID68" InheritanceCode="20" /> 
     <Type Name="TopicContainerTypeContent" Id="ID69" InheritanceCode="21" /> 
     <Type Name="TopicLanguageContent" Id="ID70" InheritanceCode="22" /> 
     <Type Name="TopicGoodieContent" Id="ID71" InheritanceCode="23" /> 
     <Type Name="TopicModuleSkinContent" Id="ID72" InheritanceCode="24" /> 
     <Type Name="TopicEventContent" Id="ID73" InheritanceCode="25" /> 
     <Type Name="TopicLocationContent" Id="ID74" InheritanceCode="26" /> 
     <Type Name="AbstractContentItem" Id="ID75" InheritanceCode="10000" /> 
     <Type Name="TopicThreadContent" Id="ID76" InheritanceCode="27" /> 
     <Type Name="TopicThreadAnswerContent" Id="ID77" InheritanceCode="28" /> 
     <Type Name="NavigationInfoContent" Id="ID78" InheritanceCode="29" /> 
     <Type Name="TopicViewContent" Id="ID79" InheritanceCode="30" /> 
     <Type Name="VisitedContent" Id="ID80" InheritanceCode="31" /> 
    </Type> 
    </Table> 

Voici la déclaration pour SP:

<Function Name="dbo.SearchAdvanced" Method="SearchAdvanced"> 
    <Parameter Name="searchTerm" Type="System.String" DbType="NVarChar(4000)" /> 
    <Parameter Name="searchKeywords" Type="System.String" DbType="NVarChar(4000)" /> 
    <Parameter Name="searchType" Type="System.Int64" DbType="BigInt" /> 
    <Parameter Name="searchTreeType" Type="System.Int64" DbType="BigInt" /> 
    <Parameter Name="parentList" Type="System.String" DbType="VarChar(MAX)" /> 
    <Parameter Name="filterList" Type="System.String" DbType="VarChar(MAX)" /> 
    <Parameter Name="filterValue" Type="System.String" DbType="VarChar(MAX)" /> 
    <Parameter Name="filterLessList" Type="System.String" DbType="VarChar(MAX)" /> 
    <Parameter Name="filterLessValue" Type="System.String" DbType="VarChar(MAX)" /> 
    <Parameter Name="filterGreaterList" Type="System.String" DbType="VarChar(MAX)" /> 
    <Parameter Name="filterGreaterValue" Type="System.String" DbType="VarChar(MAX)" /> 
    <Parameter Name="LCID" Parameter="lCID" Type="System.Int32" DbType="Int" /> 
    <Parameter Name="minLevels" Type="System.Int32" DbType="Int" /> 
    <Parameter Name="Levels" Parameter="levels" Type="System.Int32" DbType="Int" /> 
    <Parameter Name="pageSize" Type="System.Int32" DbType="Int" /> 
    <Parameter Name="PageNumber" Parameter="pageNumber" Type="System.Int32" DbType="Int" /> 
    <Parameter Name="sortOrder" Type="System.Int32" DbType="Int" /> 
    <Parameter Name="TopicContentId" Parameter="topicContentId" Type="System.Int64" DbType="BigInt" /> 
    <Parameter Name="totalRows" Type="System.Int32" DbType="Int" Direction="InOut" /> 
    <ElementType IdRef="ID50" /> 
    </Function> 
+0

Encore le problème. Nous avons reconstitué le diagramme de linq, et lorsque nous avons ajouté 13 l'héritage, nous avons de nouveau des problèmes. (Tout 12 fonctionne bien). Nous avons trouvé un moyen de tracer linq - rien d'intéressant, il suffit d'appeler la procédure stockée. De même, nous ne pouvons pas arrêter le point d'arrêt dans l'un des constructeurs d'objets métier. SO, l'erreur est quelque part à l'intérieur de linq. – st78

+0

Obtenez-vous la même exception si la recherche ne renvoie aucun résultat? Si non, l'exception survient-elle à chaque fois qu'il y a des résultats, quels que soient les paramètres de recherche? Enfin, est-ce que l'une des classes de cette hiérarchie (y compris 'baseContent') a un code personnalisé, c'est-à-dire défini dans une classe partielle quelque part? – Aaronaught

+0

L'exception se produit même lorsque 0 ligne est renvoyée. Nous avons du code personnalisé, mais ce n'est pas le cas quand l'objet est instancié. Mais je vais vérifier, juste au cas – st78

Répondre

0

Serait-il possible de re-tester avec la version bêta VS2010? Il existe, IIRC, un bogue avec l'une des implémentations IQueryable<T> re-base-classes qui est corrigé dans 4.0. Vous pourriez trouver que cela fonctionne dans 4.0, puis la question devient: attendre jusqu'en avril?

+0

Pas mauvaise idée, mais nous devons libérer les semaines les plus proches. J'ai également lu à propos de ce bug dans la communauté msdn. – st78

+0

@Sergey - Eh bien, vous devriez peut-être au moins évaluer si c'est le même problème; cela peut avoir un impact sur votre stratégie à long terme. –

0

Il suffit d'utiliser des techniques de diagnostic standard - réduire de moitié et vérifier

Modifier SP pour avoir seulement la moitié de la première paramters, ajuster la cartographie de même. Pas de problème - essayez l'autre moitié. Vous avez encore un problème, réduisez de moitié jusqu'à ce que vous trouviez ce qui le cause

+0

Nous l'avons fait - dbml a été recréé à partir de zéro, et nous commençons à obtenir une exception lors de l'ajout de la 13e classe dérivée :) Seule solution pour l'instant était de ne pas utiliser l'héritage dans linq. – st78

Questions connexes