Laden...

Forenbeiträge von patrickheppler Ingesamt 2 Beiträge

06.12.2021 - 14:16 Uhr

Hallo,
mit


public class Page : INestedSet<Page, int, int?>

funktioniert es.

Mich haben TKey und TNullableKey im Interface irritiert. Ich dachte das müssen wegen dem T dann entsprechend eigene Typen sein.
Vielen Dank!

06.12.2021 - 13:28 Uhr

Hallo zusammen,
ich bin absolut neu in der C# Welt und auch nur Hobby-Entwickler. Um mich in C# und MVC einzuarbeiten möchte ich eins meiner bestehenden Projekte von Laravel zu .NET MVC portieren.
Mein Page Model nutzt unter Laravel ein Nested Set Package um die Seiten hierarchisch abzubilden. Hierfür habe ich auch schon ein Beispiel auf github gefunden https://github.com/joshcomley/EfCore.NestedSets

Ich habe mir also ein Interface angelegt.


using System.Collections.Generic;

namespace NestedSet.Interfaces
{

    public interface INestedSet<T, TKey, TNullableKey>
         where T : INestedSet<T, TKey, TNullableKey>
    {
        TKey Id { get; set; }
        T Parent { get; set; }
        TNullableKey ParentId { get; set; }
        int Level { get; set; }
        int Left { get; set; }
        int Right { get; set; }
        bool Moving { get; set; }
        T Root { get; set; }
        TNullableKey RootId { get; set; }
        List<T> Children { get; set; }
        List<T> Descendants { get; set; }
    }
}

Und dann ein Model erstellt


using NestedSet.Interfaces;
using System.Collections.Generic;

namespace NestedSet.Models
{

    public class Page : INestedSet<Page, Id, RootId>
    {
        public Id Id { get; set; }
        public RootId RootId { get; set; }
        public Page Parent { get; set; }
        public RootId ParentId { get; set; }
        public int Level { get; set; }
        public int Left { get; set; }
        public int Right { get; set; }
        public bool Moving { get; set; }
        public Page Root { get; set; }
        public List<Page> Children { get; set; }
        public List<Page> Descendants { get; set; }

    }
}



Mein Problem sind Id und RootId, die für mein Verständnis einem Integer entsprechen sollten. Ich habe keine Ahnung wie ich diese definieren muss.
Letztendlich sollte, da ich MySQL einsetze, folgendes möglich sein.


Page page = new Page();
page.RootId = 1; // Page mit der Id 1 soll der Root des Tree werden

Visual Studio Code hatte vorgeschlagen, Id und RootID als Klassen anzulegen.


using NestedSet.Interfaces;
using System.Collections.Generic;

namespace NestedSet.Models
{

    public class Page : INestedSet<Page, Id, RootId>
    {
        public Id Id { get; set; }
        public RootId RootId { get; set; }
        public Page Parent { get; set; }
        public RootId ParentId { get; set; }
        public int Level { get; set; }
        public int Left { get; set; }
        public int Right { get; set; }
        public bool Moving { get; set; }
        public Page Root { get; set; }
        public List<Page> Children { get; set; }
        public List<Page> Descendants { get; set; }

    }

    public class Id
    {
    }

    public class RootId
    {
    }
}

Aber dann meldet .Net natürlich das Int nicht implizit in RootId konvertierbar ist.

Wie wäre der richtige Weg, Id und RootId zu definieren?