Я использую SQLite-Net PCL вместе с расширениями SQLite-Net для разработки приложения с использованием Xamarin.SQLite-Net Extensions как правильно обновлять объект рекурсивно
У меня есть один ко многим отношений между двумя классами A
и B
определяется следующим образом:
public class A
{
[PrimaryKey, AutoIncrement]
public int Id
{
get;
set;
}
public string Name
{
get;
set;
}
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<B> Sons
{
get;
set;
}
public A()
{
}
public A(string name, List<B> sons)
{
Name = name;
Sons = sons;
}
}
public class B
{
[PrimaryKey, AutoIncrement]
public int Id
{
get;
set;
}
public string Name
{
get;
set;
}
[ForeignKey(typeof(A))]
public int FatherId
{
get;
set;
}
[ManyToOne]
public A Father
{
get;
set;
}
public B()
{
}
public B(string name)
{
Name = name;
}
}
То, что я хотел бы сделать, чтобы получить объект типа A
из базы данных, удалите один из объекты Sons
типа B
и обновить базу данных соответственно. Это то, что я пробовал:
var sons = new List<B>
{
new B("uno"),
new B("due"),
new B("tre"),
};
one = new A("padre", sons);
using (var conn = DatabaseStore.GetConnection())
{
conn.DeleteAll<A>();
conn.DeleteAll<B>();
conn.InsertWithChildren(one, true);
A retrieved = conn.GetWithChildren<A>(one.Id);
retrieved.Sons.RemoveAt(1);
}
using (var conn = DatabaseStore.GetConnection())
{
var retrieved = conn.GetWithChildren<A>(one.Id);
retrieved.Sons.RemoveAt(1); //"due"
//conn.UpdateWithChildren(retrieved);
conn.InsertOrReplaceWithChildren(retrieved, true);
}
Проблема заключается в том, что и с UpdateWithChildren
и InsertOrReplaceWithChildren
объект на самом деле не удаляется из базы данных, но только это внешний ключ обнуляется. Можно ли удалить объект son
?
Это полностью имеет смысл. Хотя хотя, возможно, объект может быть удален, когда все его внешние ключи могут быть обнулены, но, возможно, это должно быть явно указано для рассматриваемого объекта. – markusian