2
私は以下のクラスがあります。私はAのインスタンスを持っている場合sqliteのネットの拡張機能は、子供たちに外部キーフィールドを挿入しないInsertOrReplaceWithChildren
class A
{
[PrimaryKey]
public int A_ID { get; set; }
[OneToMany(CascadeOperations=CascadeOperation.All)]
public List<B> Children { get; set; }
}
class B
{
[PrimaryKey]
public int B_ID { get; set; }
[ForeignKey(typeof(C))]
public int C_ID { get; set; }
}
class C
{
[PrimaryKey]
public int C_ID { get; set; }
}
、Bの子インスタンスで、db.InsertOrReplaceWithChildren(aInstance, recursive: true);
を行うことは確かにAを引き起こし、それがだんを子Bがデータベースに挿入されますが、すべての外部キー値B.C_ID
は値を持っていても常にデフォルト値0です。
例:私はレコードBを選択すると
A aInstance = new A();
aInstance.A_ID = 1;
B bInstance = new B();
bInstance.B_ID = 1;
C cInstance = new C();
cInstance.C_ID = 1;
bInstance.C_ID = cInstance.C_ID; //assigning the many-to-one foreign key of B to C
aInstance.Children.Add(bInstance); //assigning the one-to-many child record of A to B
//do the insert
db.InsertOrReplaceWithChildren(aInstance, recursive:true);
は:
B bDatabaseRecord = db.Get<B>(bRecord => bRecord.B_ID == bInstance.B_ID).First();
//bDatabaseRecord.C_ID is 0 <-- the problem