簡體   English   中英

實體框架,選擇多對多

[英]Entity Framework, select many to many

我首先使用實體​​框架代碼。

我有以下表格:

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;

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

使用正確創建的實體,您應該可以調用:

var companies = _customer.Companies;

您必須在Customer類中具有ICollection<Company> ,在Company類中具有ICollection<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);

希望有幫助!

嘗試按客戶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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM