首先在实体框架代码中进行多对多映射

Dav*_*enn 3 linq linq-to-entities entity-framework-4

我正在使用Entity Framework 4 CTP5 Code First,我有一个模型:

public class User {
   public int UserId { get; set; }
   public string Email { get; set; }
   public ICollection<Customer> TaggedCustomers { get; set; }
}
public class Customer {
  public int CustomerId { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public ICollection<User> TaggedBy { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

用户可以"标记"客户并且许多用户可以"标记"客户,存在多对多的关系.我有一个工作的DbContext,我可以使用查询客户

 var customers = DbContext.Customers.Include(c => c.TaggedBy);
Run Code Online (Sandbox Code Playgroud)

但每个客户都会拥有标记客户的所有用户.如何将TaggedBy集合限制为仅使用指定的UserId结果?

我已经尝试过,DbContext.Customers.Include(c => c.TaggedBy.Select(x => x.Id == userId));但是会引发错误.

小智 6

EF Feature CTP5:Fluent API示例 - ADO.NET团队博客 - 站点主页 - MSDN博客

modelBuilder.Entity<Product>() 
    .HasMany(p => p.Tags)
    .WithMany(t => t.Products)
    .Map(m =>
        {
            m.MapLeftKey(p => p.ProductId, "CustomFkToProductId");
            m.MapRightKey(t => t.TagId, "CustomFkToTagId");
        }); 
Run Code Online (Sandbox Code Playgroud)

代码优先映射CTP5中的变化 - ADO.NET团队博客 - 站点主页 - MSDN博客

modelBuilder.Entity<Product>()
    .HasMany(p => p.SoldAt)
    .WithMany(s => s.Products)
    .Map(mc => {
        mc.ToTable("ProductsAtStores");
        mc.MapLeftKey(p => p.Id, "ProductId");
        mc.MapRightKey(s => s.Id, "StoreId");
    });
Run Code Online (Sandbox Code Playgroud)