sqlite net extensions 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; }
}

Когда у меня есть экземпляр A с дочерними экземплярами B, выполнение db.InsertOrReplaceWithChildren(aInstance, recursive: true); действительно приводит к вставке A и его дочерних элементов B в базу данных, однако каждое значение внешнего ключа B.C_ID всегда равно 0 по умолчанию, несмотря на то, что они имеют значение.

пример:

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:

B bDatabaseRecord = db.Get<B>(bRecord => bRecord.B_ID == bInstance.B_ID).First();
//bDatabaseRecord.C_ID is 0      <-- the problem

person James Wierzba    schedule 14.02.2017    source источник


Ответы (1)


У меня была эта проблема, и она была решена путем идентификации объекта класса C в классе B (как объект внешнего ключа) и пометки отношения как 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; }
} 

Я надеюсь, что это решение работает для вас :)

person Ahmed Samy Moursi Hashwa    schedule 23.11.2017