我遇到了SQLite-Net的问题 我有三个类:ClassA,ClassB,ClassC。 ClassA与ClassB具有OneToMany关系。 ClassB与ClassC具有ManyToOne关系。
这是我的代码
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using SQLite.Net.Attributes;
using SQLiteNetExtensions.Attributes;
using WardFlex.Core.DAL.Interfaces;
public class ClassA : IEntity
{
[XmlAttribute("Id")]
[PrimaryKey, AutoIncrement]
public Int64 Id { get; set; }
public string Kaka { get; set; }
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<ClassB> ClassBs { get; set; }
}
public class ClassB : IEntity
{
[XmlAttribute("Id")]
[PrimaryKey, AutoIncrement]
public Int64 Id { get; set; }
[ForeignKey(typeof(ClassA))]
public Int64 ClassAId { get; set; }
[ManyToOne]
public ClassA ClassA { get; set; }
[ForeignKey(typeof(ClassC))]
public Int64 ClassCId { get; set; }
[ManyToOne]
public ClassC ClassC { get; set; }
}
public class ClassC : IEntity
{
[XmlAttribute("Id")]
[PrimaryKey, AutoIncrement]
public Int64 Id { get; set; }
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<ClassB> ClassBs { get; set; }
}
我保存了ClassA实体,但是 当我从ClassARepository尝试GetAllWithChildren时,我无法从ClassB看到classC实体(图像被附加) enter image description here
可能是什么问题?
提前谢谢
答案 0 :(得分:0)
使用SQLite-Net,不会自动获取关系,您必须使用GetChildren
方法手动获取它们,或者使用GetWithChildren
标志设置为true的任何recursive
方法加载整个模型树。
查看Integration Tests Project中的RecursiveReadTests
和RecursiveWriteTests
个文件,了解样本。
更新:您尚未将ClassB
ManyToOne
关系的递归政策设置为ClassC
。尝试添加CascadeOperationsFlag
以处理递归操作:
[ManyToOne(CascadeOperations = CascadeOperation.All)]
public ClassC ClassC { get; set; }
对于手动保存的关系,仅使用CascadeRead
操作或将ReadOnly
模式设置为true也是一个好主意。例如,ClassBs
ClassC
属性不需要任何写入操作:
[OneToMany(ReadOnly = true)]
public List<ClassB> ClassBs { get; set; }
这样可以避免在保存未设置属性时保存ClassC
个对象可能会删除关系的问题。