【问题标题】:Iridium ORM - cannot create relationships. (Iridium ORM - 无法创建关系。 (
【发布时间】: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


【解决方案1】:

您的模型类应该简单得多。此外,ChildModel 需要一个指向父模型的外键:

class Model
{
    [Column.PrimaryKey(AutoIncrement = true)]
    public int ID { get;set; }

    [Column.Null]
    public string Name { get; set; }

    [Relation.OneToMany(ForeignKey="ParentID")    
    public List<ChildModel> Objects {get;set;} = new List<ChildModel>();
}

class ChildModel
{
    [Column.PrimaryKey(AutoIncrement = true)]
    public int ID { get;set; }

    public int ParentID {get;set;}

    [Column.Null]
    public string Name { get; set; }
}

【讨论】:

    猜你喜欢
    • 2021-08-18
    • 2020-10-18
    • 2014-05-30
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2020-09-02
    • 1970-01-01
    相关资源
    最近更新 更多