首页 新闻 会员 周边

entity framework 多对多关系,重复添加

0
悬赏园豆:20 [已解决问题] 解决于 2016-06-01 15:18

 有两张表:Filter、Value,他们之间是多对多的关系,映射代码为:

 1 public FilterMap()
 2         {
 3             this.ToTable("Filter");
 4 
 5             this.HasMany<SpecificationValue>(p => p.Values)
 6                 .WithMany(p => p.Filters)
 7                 .Map(pp =>
 8                 {
 9                     pp.MapLeftKey("FilterId");
10                     pp.MapRightKey("ValueId");
11                     pp.ToTable("Filter_Value");
12                 });
13 }}

现在的问题时,如果已经创建了Filter,在插入Value数据时,总会在Filter表中重新创建一条数据,这是为什么?

1 var value1 = new Value
2             {
3                 Value = "国产",
4                 Filters = Context<Filter>.Entities.Where(filter => filter.Name == "国产/进口").ToList()
5             };
6             Context<Value>.Insert(value1);

 

恠娃N的主页 恠娃N | 初学一级 | 园豆:182
提问于:2016-05-31 14:54
< >
分享
最佳答案
0

Context<Filter>.Entities.Where(filter => filter.Name == "国产/进口").ToList() 

这玩意是你们自己封装的方法么。

 

请确认:Context<Filter> 代表的context 和Context<Value>.Insert这个地方的context是同一个。

并且请确认:== "国产/进口").ToList() 这里出来的model是context在跟踪管理状态的

确保2个没有问题,你的保存就没有问题

收获园豆:20
czd890 | 专家六级 |园豆:14412 | 2016-05-31 15:36

问题解决了想,谢谢! 

恠娃N | 园豆:182 (初学一级) | 2016-06-01 15:18

@恠娃N: 怎么解决的啊..我也有这个问题.

cxd1008 | 园豆:200 (初学一级) | 2017-12-07 11:47

@cxd1008: 根据 czd890 的提示解决了,获取list的context和它本身的context必须是同一个才可以,否则就会添加一个新的。

翼帆 | 园豆:200 (初学一级) | 2017-12-19 11:51

@翼帆: 你试过一对多...把主表+子表传过去对子表同时进行增加.修改.的操作吗?

cxd1008 | 园豆:200 (初学一级) | 2017-12-19 12:18

@cxd1008: 一样的,直接操作增加或修改并SaveChange()就行,但必须保持主表+子表的context是同一个,否则会有问题。

翼帆 | 园豆:200 (初学一级) | 2017-12-19 12:20

@翼帆: 给段代码参考一下可以吗? 如何处理子表.我的肯定是一个context

cxd1008 | 园豆:200 (初学一级) | 2017-12-19 12:22

@cxd1008: 

public void SaveUser(User user)
        {
            using (var dbContext = new AccountDbContext())
            {
                if (user.ID > 0)
                {
                    dbContext.Update<User>(user);
//子表保存
                    var roles = dbContext.Roles.Where(r => user.RoleIds.Contains(r.ID)).ToList();
                    user.Roles = roles;
                    dbContext.SaveChanges();
                }
                else
                {
                    var existUser = dbContext.FindAll<User>(u => u.LoginName == user.LoginName);
                    if (existUser.Count > 0)
                    {
                        throw new BusinessException("LoginName", "此登录名已存在!");
                    }
                    else
                    {
                        dbContext.Insert<User>(user);
//子表
                        var roles = dbContext.Roles.Where(r => user.RoleIds.Contains(r.ID)).ToList();
                        user.Roles = roles;
                        dbContext.SaveChanges();
                    }
                }
            }
        }
翼帆 | 园豆:200 (初学一级) | 2017-12-19 12:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册