问题描述
我一整天都被一件事困住了。我使用 sqlITE 为我的 xamarin 应用程序构建本地数据库,我想插入一些数据如下:
[Table("Localisations")]
public class Localisation
{
[PrimaryKey]
public int Id { get; set; }
public string Label{ get; set; }
[ForeignKey(typeof(Adresse))]
public int AdresseId { get; set; }
[OnetoOne]
public Adresse? Adresse { get; set; }
[ForeignKey(typeof(Localisation))]
public int ParentId{ get; set; }
[OnetoOne]
public Localisation? Parent{ get; set; }
}
如您所见,我对同一实体进行了一对一操作。但是插入的时候, ParentId
和Parent
都插入错误,因此从数据库中获取数据时,结果莫名其妙,大多数时候parent和那个是一样的主要对象,而 ParentId 等于其他一些 Id。
为了调试目的,我试图从本地化列表中每行插入一行,这是一个片段(用于调试)
foreach (var l in localisations)
{
var adresse = sqliteConnection.Update(l.Adresse);
if (adresse == 0)
sqliteConnection.Insert(l.Adresse);
var parent= sqliteConnection.Update(l.Parent);
if (parent == 0 && l.Parent!= null)
sqliteConnection.Insert(l.Parent);
sqliteConnection.InsertWithChildren(l);
var rslt = sqliteConnection.GetWithChildren<Localisation>(l.Id);
}
更新 我已经能够理解它在做什么。似乎在尝试获取父级时,它会寻找具有相同 ParentId 的那个,而不是获取具有相同 Id 的那个。
例如:
Localisation A = new Localisation { Id = 1,Label = "France",ParentId = null,Parent = null};
Localisation B = new Localisation { Id = 2,Label = "Paris",ParentId = 1,Parent = A};
所以它的作用是获取
Localisation B = Localisation { Id = 2,Parent = B};
那是因为 B 是 ParentId 等于 1 的那个。所以它不是寻找 Id = 1 的本地化,而是寻找 ParentId = 1 的本地化。
原因和方式仍然未知
谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)