我在NuGet上找到了EF.HierarchyId。看起来EF6.1.1现在支持吗?
想知道是否有任何关于如何使用它的文档。 例如:
- 它与edmx合作吗?它可以导入带有hierarchyId列的模型吗?
-some linq的例子?支持哪些命令?
谢谢。
答案 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
}