在实体模型中的“Relational”表中添加条目?我怎么做?

时间:2011-07-28 17:05:36

标签: entity-framework relational-database entity-model

故事很简单。

我有一个名为Products的表和另一个Called类。另外,我有另一个名为ProductCategories的表,它保存了相应产品的相关关系(即表中有两列,ProductId,ColumnId)。

出于某种原因,在将所有这些表添加到我的实体模型后,我没有“访问”它,因此我可以执行myentityModel.ProductCategories,所以我可以在这两个表之间的关系项。

是的,ProductCategores表被添加为实体模型的“Association”。我真的不明白。

编辑:

我确实看到,作为创建新“产品”的一部分,我可以传递“类别”的EntityCollection。所以我从我的实体模型中查询用户选择的匹配类别列表(在网页上)。所以例如,我得到(在查询模型之后),一个“类别”的对象集。但是,我遇到了两个问题:

  1. 'AddObject'只接受EntityCollection,因此我需要重新创建一个集合然后将ObjectSet中的所有对象添加到entityCollection中,在这个过程中我需要将它与之前的模型分离并添加它到新的集合。如果没有,我会得到例外。

  2. 当我执行SaveChanges时,我看到我得到一个例外,它实际上是在尝试创建新类别而不是添加新的ProductCategory。我又错过了一些东西吗?

  3. 感谢。

1 个答案:

答案 0 :(得分:0)

这听起来像是多对多的关系。在实体模型中,您不需要将连接表声明为单独的实体。而是将Products和Categories之间的关系配置为多对多,并添加有关连接表的元数据。在Hibernate中,您将拥有:

    @ManyToMany(targetEntity=Categories.class, cascade={CascadeType.ALL}, fetch = FetchType.LAZY)
    @JoinTable(name="tb_products_categories",
        joinColumns=@JoinColumn(name="category_id"),
        inverseJoinColumns=@JoinColumn(name="product_id")
    )
    @IndexColumn(name="join_id")
    public List<Categories> getCategories() {
        return categories;
    }

在查询时,ORM层负责确定SQL和遍历表连接。