0

Xamarin を使用してアプリケーションを開発するために、SQLite-Net PCL を SQLite-Net 拡張機能と共に使用しています。

私のモデルには、1 対多の関係 (モデルではリストとして表される) を介して他の 4 つのエンティティに接続されているエンティティ (A と呼びましょう) があります。データベースに A のオブジェクトを挿入するときにテーブルに再帰的に入力するために、読み取り、挿入、および削除の両方でカスケードを使用するリレーションを定義しました。

すべてが正しく行われたかどうかをテストするために、タイプ A のオブジェクトを作成し、インクルード リストに入力し、最後にそれをデータベースに挿入しました。奇妙なことに、リストを含む 4 つのうち 2 つが挿入に成功し、すべての接続されたオブジェクトが挿入されました。他の 2 については、リストの最初のオブジェクトのみがデータベースに挿入されます。明確にするために、データベースの内容を db ブラウザで直接チェックしています。

以下は、リストの最初の要素のみが挿入されるオブジェクトの 1 つの例です。

public class Username : Entity
{
    public string Name
    {
        get;
        set;
    }

    [ForeignKey(typeof(A))]
    public int AId
    {
        get;
        set;
    }

    public Username(string username)
    {
        Name = username;
    }
}

これは、挿入が正しいオブジェクトの 1 つです。

public class AnAddress: Entity
{

    public string Address
    {
        get;
        set;
    }

    public AddressType Type
    {
        get;
        set;
    }

   [ForeignKey(typeof(A))]
    public int AId
    {
        get;
        set;
    }
}

明確にするために、基本オブジェクト Entity には主キーの定義が含まれています。

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

次に、同じ方法で 2 つのリスト (List と List) を使用して A オブジェクトを初期化することにより、A オブジェクトを作成します。最後にオブジェクトをデータベースに挿入します

c.InsertWithChildren(entity, recursive: true));

エンティティはタイプ A で、c は接続オブジェクトです。

この奇妙な行動の動機について何か手がかりはありますか?

4

0 に答える 0