0

我首先使用实体​​框架代码。

我有以下表格:

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;

但是公司不包含任何东西......

4

3 回答 3

0

使用正确创建的实体,您应该能够调用:

var companies = _customer.Companies;

你必须ICollection<Company>在你的Customer班级里,ICollection<Customer>Company班级里。

查看本教程:使用 Code First 创建多对多映射

于 2013-04-02T12:45:37.920 回答
0

如果您首先使用代码,您可以将公司的虚拟集合添加到您的客户类,并将客户的虚拟集合添加到您的公司类:

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);

希望有帮助!

于 2013-04-02T12:54:18.687 回答
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);
于 2013-04-02T14:22:43.333 回答