需要Entityframework.HierarchyId的示例

时间:2014-08-08 04:06:17

标签: entity-framework entity-framework-6

我在NuGet上找到了EF.HierarchyId。看起来EF6.1.1现在支持吗?

想知道是否有任何关于如何使用它的文档。 例如:

- 它与edmx合作吗?它可以导入带有hierarchyId列的模型吗?

-some linq的例子?支持哪些命令?

谢谢。

2 个答案:

答案 0 :(得分:9)

从版本6.1.3-alpha1开始,您可以添加多个实体,不再有ArgumentException“至少有一个对象必须实现IComparable”。 (这与版本6.1.2相同,仅包含此问题的修复) 但我无法重现“并且通过钥匙找不到工作”。问题

如果要从数据库创建模型,则需要安装EntityFramework Tools的自定义版本。源代码在CodePlex上:https://entityframework.codeplex.com/SourceControl/network/forks/zgabi/EfHierarchyId Edmx应该可以使用,如果您发现任何问题,请将其报告给zavarkog(X)gmail.com

答案 1 :(得分:2)

我刚安装它,我认为它仍在开发中。

首先从数据库创建。

  

目标目前不支持数据类型“hierarchyid”   .NET Framework版本;表'dbo.Users'中的列'Id'是   排除。

     

表/视图'dbo.Users'上的列'Id'被排除在外,并且是a   关键栏目。表/视图已被排除。请修复实体   在架构文件中,取消注释。

首先从代码创建。

public class AppContext : DbContext
{
    public DbSet<User> Users { get; set; }
}
public class User
{
    public HierarchyId Id { get; set; }
    public string Name { get; set; }
}

它工作正常,数据库和表格已成功创建,但一次添加多个对象会引发错误。

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();
}

按键找不到。

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
}