2017-02-14 8 views
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 

答えて

0

を私はこの問題を抱え、それが外部キーとして(クラスB、クラスCのオブジェクトを識別することによって解決しました。関係をReadOnly = trueとしてマークします。 ので、コードが、私はこのソリューションはあなたのために働く:)

を願ってい

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

    [OneToOne(ReadOnly=true)] 
    public C C_Obj { get; set; } 

    [ForeignKey(typeof(C))] 
    public int C_ID { get; set; } 
} 

class C 
{ 
    [PrimaryKey] 
    public int C_ID { get; set; } 
} 

する必要があります

関連する問題