我将 SQLite-Net PCL 与 SQLite-Net 扩展一起使用,以使用 Xamarin 开发应用程序。
在我的模型中,我有两个实体,我们称它们为 A 和 B,它们通过一对一和一对多关系连接。例如,A与B是一对一的关系,A与B也是一对多的关系。
是否可以使用 SQLite-Net 扩展来表达这种行为?
是的,但是您必须在关系属性中显式声明外键和逆属性,因为否则库可能会获得错误的关系外键。
public class ClassA
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[OneToMany("O2MClassAKey", "BObjectsInverse")]
public List<ClassB> BObjects { get; set; }
[OneToOne("O2OClassAKey", "BObjectInverse")]
public ClassB BObject { get; set; }
// Other properties
public string Bar { get; set; }
}
public class ClassB
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[ForeignKey(typeof (ClassA))]
public int O2MClassAKey { get; set; }
[ForeignKey(typeof (ClassA))]
public int O2OClassAKey { get; set; }
// Inverse relationships, these are optional
[ManyToOne("O2MClassAKey", "BObjects")]
public ClassA BObjectsInverse { get; set; }
[OneToOne("O2OClassAKey", "BObject")]
public ClassA BObjectInverse { get; set; }
// Other properties
public string Foo { get; set; }
}
请注意外键O2OClassAKey
为了OneToOne
关系可以在任何类中声明。
如果不需要逆向属性,可以在关系属性中跳过它们:
public class ClassA
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[OneToMany("O2MClassAKey")]
public List<ClassB> BObjects { get; set; }
[OneToOne("O2OClassAKey")]
public ClassB BObject { get; set; }
// Other properties
public string Bar { get; set; }
}
public class ClassB
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[ForeignKey(typeof (ClassA))]
public int O2MClassAKey { get; set; }
[ForeignKey(typeof (ClassA))]
public int O2OClassAKey { get; set; }
// Other properties
public string Foo { get; set; }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)