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 は接続オブジェクトです。
この奇妙な行動の動機について何か手がかりはありますか?