【发布时间】:2018-03-03 22:32:15
【问题描述】:
我正在开发一个 Xamarin 应用程序作为学习练习,但我一生都无法正确映射关系/按预期工作。 Iridium 一直是我选择的 ORM,因为它应该比标准 SQLite 更好地支持关系和自定义类型。 我创建了一个单独的控制台应用程序来尝试调试它,但又碰壁了。谁能帮忙指出我错过了什么?还是我在 Iridium/relationship/Types 或 ORM 中忽略了一些基本的东西?
NuGet:iridium.db.sqlite
class Model
{
[Column.PrimaryKey(AutoIncrement = true)]
private int _ID;
public int ID { get { return _ID; } set { _ID = value; } }
[Column.Null]
public string Name { get; set; }
private List<ChildModel> _object;
[Relation.OneToMany]
private IEnumerable<ChildModel> _Objects
{
get { return _object; }
set { _object = value.ToList(); }
}
public List<ChildModel> Objects
{
get { return _object; }
set { _object = value; }
}
public Model()
{
_object = new List<ChildModel>();
}
}
class ChildModel
{
[Column.PrimaryKey(AutoIncrement = true)]
private int _ID;
public int ID { get { return _ID; } set { _ID = value; } }
[Column.Null]
public string Name { get; set; }
public ChildModel()
{
}
}
class Program
{
static void Main(string[] args)
{
var dbContext = new StorageContext(new SqliteDataProvider("mydbTest.sqlite"));
// Create tables (if they don't exist) yet
dbContext.CreateTable<Model>();
dbContext.CreateTable<ChildModel>();
//generate test data
Model model = new Model {Name ="Test" };
model.Objects.Add(new ChildModel { Name = "first" });
model.Objects.Add(new ChildModel { Name = "second" });
model.Objects.Add(new ChildModel { Name = "third" });
//Save Test Data in DB.
dbContext.Insert(model, obj => obj.Objects);
//TODO: read test data once we know it stores properly...
}
}
【问题讨论】:
-
你的问题是什么?异常/堆栈跟踪?
-
没有抛出异常,只是似乎完全忽略了方法调用。我可以单独插入两个类。但不能一起插入。当我打开 .sqlite 文件查看它的结构时,没有设置关系列。铱文档指出相关实体的主键应自动用作外键,但没有任何反应。 - 担心我可能不得不手动映射它可能会变得混乱和复杂。不过,一定有一个解决方法/陷阱。似乎相当基础。
标签: c# sqlite orm xamarin.forms