SQLite-Net扩展:ManyToMany关系->向连接表添加值

时间:2019-05-09 11:32:57

标签: c# .net sqlite-net sqlite-net-extensions

我有两个实体:Component和Attribute。组件可以具有多个属性,而属性也可以具有多个组件。该属性的值将存储在连接表“ ComponentAttribute”中。我不知道增加价值的最佳方法是什么。

public class Component
{
    [PrimaryKey, AutoIncrement]
    public int id { get; set; }

    [ManyToMany(typeof(ComponentAttribute))]
    public List<Attribute> attributes { get; set; }
}
public class Attribute
{
    [PrimaryKey, AutoIncrement]
    public int id { get; set; }
    public string name { get; set; }

    [ManyToMany(typeof(ComponentAttribute))]
    public List<Component> components { get; set; }
}
public class ComponentAttribute
{
    [PrimaryKey, AutoIncrement]
    public int id { get; set; }

    public string value { get; set; }

    [ForeignKey(typeof(Component))]
    public int componentId { get; set; }

    [ForeignKey(typeof(Attribute))]
    public int attributeId { get; set; }
}
Attribute attribute = new Attribute();
Attribute attribute2 = new Attribute();
Component component = new Component();

component.attributes.Add(attribute);
component.attributes.Add(attribute2);

this.dbConnection.Insert(attribute);
this.dbConnection.Insert(attribute2);
this.dbConnection.Insert(component);
this.dbConnection.UpdateWithChildren(component);

// After this I have to load the new ComponentAttributes and add the value manual

如果有人可以给我提示如何访问该值,那就太好了

1 个答案:

答案 0 :(得分:1)

很遗憾,您不能这样做。

SQLite-Net-Extensions在多对多关系处理程序中使用InsertAll方法,并且仅将标记为ForeignKey的属性插入数据库表中。

最好的解决方法是您正在使用该问题。
通过已知数据(ComponentAttributesAttribute.id)从数据库加载Component.id实体,然后通过主键(value更新接收到的ComponentAttribute对象的ComponentAttribute.id )。