我正在使用SQLite-Net PCL和SQLite-Net扩展来开发使用Xamarin的应用程序。
在我的模型中,我有一个实体(我们称之为A),它通过一对多关系(在模型中表示为列表)连接到其他四个实体。为了在数据库中插入A的对象时递归填充表,我已经定义了在读取,插入和删除时使用Cascade的关系。
为了测试我是否正确完成了所有操作,我创建了一个A类型的对象并填充了包含列表,最后我将其插入到数据库中。奇怪的是,对于4个包含列表中的2个,插入进行得很顺利,并插入了所有连接的对象。对于其他2,相反,只有列表的第一个对象插入数据库中。为了清楚起见,我正在使用数据库浏览器直接检查数据库内容。
以下是仅插入列表的第一个元素的其中一个对象的示例。
public class Username : Entity
{
public string Name
{
get;
set;
}
[ForeignKey(typeof(A))]
public int AId
{
get;
set;
}
public Username(string username)
{
Name = username;
}
}
这是插入正确的对象之一。
public class AnAddress: Entity
{
public string Address
{
get;
set;
}
public AddressType Type
{
get;
set;
}
[ForeignKey(typeof(A))]
public int AId
{
get;
set;
}
}
要明确,基础对象实体包含主键的定义:
public abstract class Entity
{
[PrimaryKey, AutoIncrement]
public int Id
{
get;
set;
}
public Entity()
{
Id = -1;
}
}
这就是定义关系的方式:
public class A : Entity
{
public string Name
{
get;
set;
}
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<AnAddress> Addresses
{
get;
set;
}
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<Username> Usernames
{
get;
set;
}
}
然后我通过以相同的方式用两个列表(列表和列表)初始化它来创建一个A对象。 我最后用
将对象插入数据库c.InsertWithChildren(entity, recursive: true));
其中entity是A类,c是连接对象。
你对这种奇怪行为的动机有什么线索吗?