SQLite 网络扩展 |对同一实体的外键引用
SQLite-Net Extensions | Foreign Key Reference to same entity
在外键引用同一实体(自连接)的情况下,我在使用 SQLite-Net Extensions 将数据保存在本地数据库中时遇到问题。
示例 – 员工和经理。每个员工都有一个经理,经理也是员工。在这种情况下,我在保存数据时遇到了问题。如果您能提供一些见解,那将非常有帮助。这个扩展是否支持这种关系?
是的,支持相同 class 的对象之间的关系,但外键和反向属性必须在关系 属性 属性中明确指定,因为发现系统会把它弄错有两个相同类型的关系。
本示例摘自项目自述文件:
public class TwitterUser {
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
[ManyToMany(typeof(FollowerLeaderRelationshipTable), "LeaderId", "Followers",
CascadeOperations = CascadeOperation.CascadeRead)]
public List<TwitterUser> FollowingUsers { get; set; }
// ReadOnly is required because we're not specifying the followers manually, but want to obtain them from database
[ManyToMany(typeof(FollowerLeaderRelationshipTable), "FollowerId", "FollowingUsers",
CascadeOperations = CascadeOperation.CascadeRead, ReadOnly = true)]
public List<TwitterUser> Followers { get; set; }
}
// Intermediate class, not used directly anywhere in the code, only in ManyToMany attributes and table creation
public class FollowerLeaderRelationshipTable {
public int LeaderId { get; set; }
public int FollowerId { get; set; }
}
如您所见,我们在 Twitter 用户之间建立了多对多关系。在您的情况下,它将是一对多的,因此您不需要中间 table 并且您需要 Person
中的外键(例如 ManagerId
) class.
在外键引用同一实体(自连接)的情况下,我在使用 SQLite-Net Extensions 将数据保存在本地数据库中时遇到问题。
示例 – 员工和经理。每个员工都有一个经理,经理也是员工。在这种情况下,我在保存数据时遇到了问题。如果您能提供一些见解,那将非常有帮助。这个扩展是否支持这种关系?
是的,支持相同 class 的对象之间的关系,但外键和反向属性必须在关系 属性 属性中明确指定,因为发现系统会把它弄错有两个相同类型的关系。
本示例摘自项目自述文件:
public class TwitterUser {
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
[ManyToMany(typeof(FollowerLeaderRelationshipTable), "LeaderId", "Followers",
CascadeOperations = CascadeOperation.CascadeRead)]
public List<TwitterUser> FollowingUsers { get; set; }
// ReadOnly is required because we're not specifying the followers manually, but want to obtain them from database
[ManyToMany(typeof(FollowerLeaderRelationshipTable), "FollowerId", "FollowingUsers",
CascadeOperations = CascadeOperation.CascadeRead, ReadOnly = true)]
public List<TwitterUser> Followers { get; set; }
}
// Intermediate class, not used directly anywhere in the code, only in ManyToMany attributes and table creation
public class FollowerLeaderRelationshipTable {
public int LeaderId { get; set; }
public int FollowerId { get; set; }
}
如您所见,我们在 Twitter 用户之间建立了多对多关系。在您的情况下,它将是一对多的,因此您不需要中间 table 并且您需要 Person
中的外键(例如 ManagerId
) class.