在某些情况下,SQLite-Net Extensions不会以级联方式插入

时间:2015-03-12 16:12:00

标签: c# sqlite xamarin sqlite-net sqlite-net-extensions

我正在使用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是连接对象。

你对这种奇怪行为的动机有什么线索吗?

0 个答案:

没有答案