2009-07-24 114 views
7

我正在玩一个POC项目的实体框架。 在我的数据库我有实体框架多对多CRUD

Category<-------CategoryProduct ------->Product

(当连接表是在模型中的实体。)

我该怎么办选择/插入/更新删除在这?

回答

13

假设CategoryProduct表只是由两个FKS一个Product和一个Category ... ...的EF默认情况下将不会产生CategoryProduct实体,而不是操纵该表,您将需要创建/删除使用关系Product.CategoriesCategory.Products集合。

I.e.添加一行:

product.Categories.Add(category); // or category.Products.Add(product); 

要删除行:

product.Categories.Remove(category); // or visa versa 

要查询的表,即获得该表中的行:

var pc = from c in ctx.Categories 
     from p in c.Products 
     select new {CategoryID = c.ID, ProductID = p.ID}; 

和更新不会使因为PK(不能改变)是所有的列,即没有行的列可以被更新,所以行本身不能被更新(当然不包括删除)。

希望这有助于

亚历克斯·詹姆斯

+0

谢谢亚历克斯。但是,我怎样才能结束产品的专栏? 我收到此错误: 一个实体对象不能被多个IEntityChangeTracker实例引用。 的代码是: 公共静态INT更新(产品C) { 使用(SimvideoEntities CTX =新SimvideoEntities()){ ctx.Attach(C); Common.SetModified(ctx,c); return ctx.SaveChanges(true); } } – Shuaib 2009-07-24 02:57:36

1

有两种方式,至少有两个我能想到的:

  1. 对每个对象的实体,这是讨厌的,它是,像往常一样难以得到接线是否正确。
  2. 编辑模型,以便它将多对多关系建模为多对多关系,然后为您做所有事情。

方案2是更好的办法,但目前有局限性,如果你有与CategoryProduct有关的其他数据也不起作用。

+0

感谢。这就是我所做的。删除了中产阶级。所以在模型中它是一个多对多的类别产品消失了。 – Shuaib 2009-07-24 03:03:00