如何解决SQLITE 一对一到同一实体
我一整天都被一件事困住了。我使用 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 举报,一经查实,本站将立刻删除。