有两张表: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);
Context<Filter>.Entities.Where(filter => filter.Name == "国产/进口").ToList()
这玩意是你们自己封装的方法么。
请确认:Context<Filter> 代表的context 和Context<Value>.Insert这个地方的context是同一个。
并且请确认:== "国产/进口").ToList() 这里出来的model是context在跟踪管理状态的
确保2个没有问题,你的保存就没有问题
问题解决了想,谢谢!
@恠娃N: 怎么解决的啊..我也有这个问题.
@cxd1008: 根据 czd890 的提示解决了,获取list的context和它本身的context必须是同一个才可以,否则就会添加一个新的。
@翼帆: 你试过一对多...把主表+子表传过去对子表同时进行增加.修改.的操作吗?
@cxd1008: 一样的,直接操作增加或修改并SaveChange()就行,但必须保持主表+子表的context是同一个,否则会有问题。
@翼帆: 给段代码参考一下可以吗? 如何处理子表.我的肯定是一个context
@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(); } } } }