实体框架,选择多对多

时间:2013-04-02 12:43:00

标签: c# entity-framework select many-to-many

我首先使用Entity Framework代码。

我有以下表格:

Companies : PK ID int, Name, ...
Customers : PK ID int, Name, ...
CustomersCompanies : CustomerID, CompanyID

我可以毫无问题地创建客户和公司。 但我不知道如何让所有公司成为客户。

我试过了:

_customer = ...
var companies = from c in _db.Companies
                        where c.Customers.Contains(_customer)
                        select c;

但公司不包含任何内容......

3 个答案:

答案 0 :(得分:0)

使用正确创建的实体,您应该可以致电:

var companies = _customer.Companies;

您必须在ICollection<Company>课程中CustomerICollection<Customer>课程内Company

查看本教程:Creating a Many To Many Mapping Using Code First

答案 1 :(得分:0)

如果您首先使用代码,则只需向您的Customer类添加一个虚拟的公司集合,并向您的公司类添加一个虚拟的客户集合:

public class Customer 
{ 
    public int Id { get; set; }

    public virtual ICollection<Company> Companies { get; set; }
}

public class Company
{
    public int Id { get; set; }

    public virtual ICollection<Customer> Customers { get; set; }
}

然后获取客户并包括他们可以做的公司:

var customers = _db.Customers.Include(x => x.Companies);

我不确定你的_db类是什么样的,所以我不知道你是否只将你的实体集合作为属性。通常我使用具有GetDbSet方法的实体框架DbContext。所以我会做类似的事情:

var customers = _dbContext.GetDbSet<Customer>().Include(x => x.Companies);

希望有所帮助!

答案 2 :(得分:0)

尝试按客户ID进行比较,例如:

_customer = ...
var companies = from c in _db.Companies
                    where c.Customers.Where(x => x.CustomerID == c.CompanyID)
                    select c;

或更短:

var comapnies = _db.Companies.Select(x => x.CustomerID == c.CompanyID);