这个业务场景是商品 和类别的多对多关系,一个商品有多个类别,一个类别属于多个商品。
先添加类别,然后添加商品时去多选类别。
实体类映射是这样的,类别没有导航:
不对第三个关系表进行干预,我在删除这个商品时,第三个关系表上这个商品和相关的类别关系也会删除,可以获得这样一个好处,又少写了好多代码
foreach (var item in _ProductRepository.GetProducts.Where(n => n.Categories.Where(x => x.Name == "手机").Count() > 0)) { _ProductRepository.Remove(item); } _ProductRepository.SaveChanges();
应该控制好 category 表的 增加操作
多对多会有3个表,用CodeFirst这种方式在Product选择Category时内部会在第三个表上确定关系,但是会新建类别,你说的控制Category的增加操作怎么实施。
或者手动对第三个确定关系的表进行CRUD应该可以解决,如果不手动对第三个确定关系的表进行干预有办法能做没?
@张耕明:
1. Product选择Category(已经存在的)时内部会在第三个表上确定关系, 这个没问题
2. 会新建类别 这个肯定不会因确定关系,就会新建的,肯定你代码有增加的操作
@Yu: 如果是按你的测试代码看来操作,肯定是确定关系又新增类别的
@Yu: 增加Category的操作肯定有,但那不是我代码控制的,是Entity FrameWork控制的,我的代码里Product的CRUD和Category的CURD是分开的,我在执行Product的添加时要查询一个Category,这样我添加Product后EF自动把Product相关的Category添加到了数据库,而不是引用我查询出来的Category
@张耕明: 可以的话 贴多点相关的代码
MANY TO MANY 的我也做过,没你说的情况
@Yu: 我封装太狠了,在原生态的情况下像这样操作并不会有我说的那个问题!
添加前先通过 FindByID判断一下是否存在
我也碰到分类是新增的,怎么解决