加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite-Net扩展两个实体之间的一对一和一对多关系

发布时间:2020-12-12 19:13:27 所属栏目:百科 来源:网络整理
导读:我正在使用SQLite-Net PCL和SQLite-Net扩展来开发使用Xamarin的应用程序. 在我的模型中,我有两个实体,让我们称它们为A和B,它们通过一对一和一对多的关系连接起来.例如,A与B具有一对一的关系,A与B具有一对多的关系. 是否可以用SQLite-Net扩展表达这种行为?
我正在使用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; }
}

请注意,可以在任何类中声明OneToOne关系的外键O2OClassAKey.

如果您不需要反向属性,可以在关系属性中跳过它们:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读