【发布时间】:2014-05-26 08:39:31
【问题描述】:
我有一个表 Employee,它必须具有 递归关系 例如。
第 1 行: EmployeeId = 1,EmployeeName = Albert,SupervisorId = NULL;
第 2 行:EmployeeId = 2,EmployeeName = Leonardo,SupervisorId = 1;
即EmployeeId(2) 是 EmployeeId(1) 的子代
我在 C# 中有以下代码,其中我使用 SQLite-Net Extentions 来实现递归关系:
public class Employee
{
public Employee()
{
Subordinates = new List<Employee>();
}
[PrimaryKey]
[MaxLength(36)]
public string EmployeeGuid { get; set; }
public string EmployeeName { get; set; }
[OneToMany("SupervisorGuid")]
public List<Employee> Subordinates { get; set; }
[ManyToOne("EmployeeGuid")]
public Employee Supervisor { get; set; }
[ForeignKey(typeof(Employee))]
[MaxLength(36)]
public string SupervisorGuid { get; set; }
}
接下来我测试代码——我创建两个员工并将他们添加到表员工:
第一个员工
Employee employee1 = new Employee
{
EmployeeGuid = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
EmployeeName = "Albert"
};
Insert(employee1);
第二名员工
Employee employee2 = new Employee
{
EmployeeGuid = "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
EmployeeName = "Leonardo",
SupervisorGuid = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
};
Insert(employee2);
但是当我打电话时
GetByGuid(string guid)
guid 是第一个员工,我收到以下错误:
附加信息:“Project.Models.Employee”类型的对象无法转换为“System.Collections.Generic.List`1”类型
SQLite-Net 是否支持递归关系?请问有什么建议吗?
更新
GetByGuid() 的代码:
public T GetByGuid(string guid)
{
return Database.GetWithChildren<T>(guid);
}
另外,当我添加 2nd 员工而不指定外键并进行调用时,它可以工作......
【问题讨论】:
-
你能显示
GetByGuid的代码还是这是SQLite-extensions的内置方法?
标签: c# recursion relationship sqlite-net sqlite-net-extensions