代码之家  ›  专栏  ›  技术社区  ›  Marshall Tigerus

在efcore中添加类之间的多对多关系

  •  0
  • Marshall Tigerus  · 技术社区  · 6 年前

    我正在使用EF Core开发一个代码优先的数据库,在正确处理实体之间的关系时遇到了一些问题。

    但是,每当我尝试将现有客户添加到用户列表时,都会出现一个错误,表明该客户已经存在。

    // retrieves the current list of Customers 
    var current = GetCustomersByUserId(userId.ToString())?.Select(x => x.Id).ToList();
    var toAdd = customers.Where(x => !current.Any(y => y.Equals(x.Id)));
    customers.ForEach(x => x.Id = _data.Customers.First(y => y.SalesOrg.Equals(x.SalesOrg) && y.DistributionChannel.Equals(y.DistributionChannel) && y.Division.Equals(x.Division)).Id);
    var affil = _data.Users.FirstOrDefault(x => x.Id.Equals(userId));
    if (affil == null)
    {
        affil = new User() { UserId = userId, Customers = customers, Id = Guid.NewGuid() };
        // Where the error occurs
        _data.Users.Add(affil);
    }
    else
    {
        affil.Customers.AddRange(customers);
    }
    _data.SaveChanges();
    return customers;
    

    modelBuilder.Entity<User>()
                .HasMany(x => x.Customers);
    
    modelBuilder.Entity<Customer>()
                .HasMany(x => x.Users);
    

    在每一个类中,我引用另一个作为属性,如下所示:

    public List<Customer> Customers { get; set; }
    
    public List<User> Users { get; set; }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Llazar    6 年前

    EF Core 2.1还不支持没有实体类来表示联接表的多对多关系。

        modelBuilder.Entity<UserCustomer>()
            .HasKey(t => new {....});
    
        modelBuilder.Entity<UserCustomer>()
            .HasOne(uc => uc.User)
            .WithMany(u => u.UsersCustomers )
            .HasForeignKey(.. => ....);
    
        modelBuilder.Entity<UserCustomer >()
            .HasOne(uc => uc.Customer)
            .WithMany(c => c.UsersCustomers)
            .HasForeignKey(.. => .....);
    
    推荐文章