Ho trovato EF.HierarchyId su NuGet. Sembra che EF6.1.1 supporti ora?
Mi chiedo se c'è qualche documentazione che posso vedere su come usarlo. Per esempio:
- funziona con edmx? può importare modelli con colonna hierarchyId?
- alcuni esempi di linq? quali comandi sono supportati?
Grazie.
L'ho appena installato, penso che sia ancora in fase di sviluppo.
Prima di creare dal database.
Il tipo di dati "hierarchyid" non è attualmente supportato per la versione di .NET Framework di destinazione; la colonna "Id" nella tabella "dbo.Users" è stata esclusa.
La colonna "Id" nella tabella / vista "dbo.Users" è stata esclusa ed è una colonna chiave. La tabella / vista è stata esclusa. Correggere l'entità nel file dello schema e rimuovere il commento.
Prima di creare dal codice.
public class AppContext : DbContext
{
public DbSet<User> Users { get; set; }
}
public class User
{
public HierarchyId Id { get; set; }
public string Name { get; set; }
}
Ha funzionato, il database e la tabella sono stati creati correttamente, ma l'aggiunta di più oggetti contemporaneamente genera un errore.
using (var db = new AppContext())
{
db.Users.Add(new User { Id = HierarchyId.Parse("/"), Name = "President" });
// Working.
db.SaveChanges();
db.Users.Add(new User { Id = HierarchyId.Parse("/1/"), Name = "VP 1" });
db.Users.Add(new User { Id = HierarchyId.Parse("/2/"), Name = "VP 2" });
db.Users.Add(new User { Id = HierarchyId.Parse("/3/"), Name = "VP 3" });
// ArgumentException "At least one object must implement IComparable."
db.SaveChanges();
}
E trovare per chiave non funziona.
using (var db = new AppContext())
{
var id = HierarchyId.Parse("/");
var user1 = db.Users.Find(id); // null
var user2 = db.Users.FirstOrDefault(u => u.Id == id); // null
var user3 = db.Users.FirstOrDefault(u => HierarchyId.Compare(u.Id, id) == 0); // null
var user4 = db.Users.AsNoTracking().ToArray()
.FirstOrDefault(u => u.Id == id); //not null
var user5 = db.Users.AsNoTracking().ToArray()
.FirstOrDefault(u => HierarchyId.Compare(u.Id, id) == 0); //not null
}
Dalla versione 6.1.3-alpha1 è possibile aggiungere più entità, non più ArgumentException "Almeno un oggetto deve implementare IComparable." (Questo è lo stesso della versione 6.1.2, contiene solo la correzione per questo problema) Ma non riesco a riprodurre il "E trovare per chiave non funziona". problema.
Se si desidera creare il modello dal database, è necessario installare una versione personalizzata di EntityFramework Tools. Il codice sorgente è su CodePlex: https://entityframework.codeplex.com/SourceControl/network/forks/zgabi/EfHierarchyId Edmx dovrebbe funzionare, se trovi qualche problema, segnalalo a zavarkog (X) gmail.com