sql >> Databasteknik >  >> RDS >> Sqlserver

Finns det ett praktiskt sätt att använda hierarchyID-datatypen i entity framework 4?

Tja, jag verkar få synpunkter men inga svar. Jag hade några omedelbara behov av att arbeta med hierarkistrukturen ovanför SQL, så jag satte ihop en statisk hjälparklass. Jag anser inte att detta är en komplett lösning, men än så länge fungerar det relativt bra. PadPath är verkligen den kritiska funktionen här.

public static class SQLHierarchyManipulatin {
    const int   DEFAULT_PAD_LEN     = 3;
    const char  DEFAULT_PAD_CHAR    = '0';

    public static string PadPath(string Hierarchy) {
        return PadPath (Hierarchy, DEFAULT_PAD_LEN);
    }       
    public static string PadPath(string Hierarchy, int padLen) {
        string[]    components  = Hierarchy.Split('/');

        for (var i = 0; i < components.Length; i++ ) {
            if (components[i] != "") {
                components[i] = components[i].PadLeft(padLen, DEFAULT_PAD_CHAR);
            }
        }
        return string.Join("/", components);
    }

    public static int CurrentNodeIndex(string Hierarchy) {
        string[]    components  = Hierarchy.Split('/');
        string      startItem   = components[components.Length - 2]; //one slot back from trailing slash

        return int.Parse(startItem);
    }

    public static string ParentPath (string Hierarchy) {
        return  Hierarchy.Substring(0, Hierarchy.TrimEnd('/').LastIndexOf('/') + 1);
    }

    public static string AppendChildWithPadding (string Hierarchy, int childIndex, int padLen) {
        return AppendChild(Hierarchy, childIndex, DEFAULT_PAD_LEN);
    }
    public static string AppendChildWithPadding (string Hierarchy, int childIndex) {
        return AppendChild(Hierarchy, childIndex, DEFAULT_PAD_LEN);
    }
    public static string AppendChild (string Hierarchy, int childIndex) {
        return AppendChild(Hierarchy, childIndex, DEFAULT_PAD_LEN);
    }
    public static string AppendChild (string Hierarchy, int childIndex, int padLen) {
        return Hierarchy + childIndex.ToString().PadLeft(padLen, DEFAULT_PAD_CHAR) + "/";
    }
}

Hoppas detta hjälper någon! Fast jag skulle fortfarande vilja höra från folk.




  1. Varför är denna INNER JOIN/ORDER BY mysql-fråga så långsam?

  2. PHP, SQL limit-fråga efter php-variabel

  3. Procedur för att kontrollera om det inte finns dubbletter av rader i tabellen innan du infogar (Oracle)

  4. mySQL Table ERROR 1064