Я использую SQLite-Net PCL вместе с расширениями SQLite-Net для разработки приложения с использованием Xamarin.Проблема с расширением SQLite.Net с InsertOrReplaceWithChildren
У меня есть два класса A
и B
определены следующим образом:
public class A
{
[PrimaryKey, AutoIncrement]
public int Id
{
get;
set;
}
[Unique]
public string Name
{
get;
set;
}
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<B> Sons
{
get;
set;
}
public A(string name, List<B> sons)
{
Name = name;
Sons = sons;
}
}
public class B
{
[PrimaryKey, AutoIncrement]
public int Id
{
get;
set;
}
[Unique]
public string Name
{
get;
set;
}
public string LastModified
{
get;
set;
}
[ForeignKey(typeof(A))]
public int FatherId
{
get;
set;
}
[ManyToOne]
public A Father
{
get;
set;
}
public B()
{
}
public B(string name)
{
Name = name;
}
}
Я пытаюсь использовать вставку или заменить следующим образом:
var sons1 = new List<B>
{
new B("uno"),
};
var a1 = new A("padre", sons1);
var sons2 = new List<B>
{
new B("uno2"),
};
var a2 = new A("padre", sons2);
using (var conn = DatabaseStore.GetConnection())
{
conn.DeleteAll<A>();
conn.DeleteAll<B>();
}
using (var conn = DatabaseStore.GetConnection())
{
conn.InsertOrReplaceWithChildren(a1, true);
conn.InsertOrReplaceWithChildren(a2, true);
}
Проблема заключается в том, что второй InsertOrReplaceWithChildren
является бросая исключение Constraint
, которое не выбрасывается, если мы удалим уникальное ограничение на A.Name
. Разве InsertOrReplaceWithChildren
должен заменить объект, если нарушено уникальное ограничение?
Звучит как ошибка. Возможно, здесь: https://bitbucket.org/twincoders/sqlite-net-extensions/src/fe7c6539bf56f652aae06d0af26b54cff2ffcfd3/SQLiteNetExtensions/Extensions/WriteOperations.cs?at=master#cl-272 – redent84