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!
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?