簡體   English   中英

實體框架多對多過濾器

[英]Entity Framework Many to Many Filter

在EF Code First中,我在聯系人和列表之間有很多關系。 禁用ProxyCreation和LazyLoading以允許序列化實體。

我有一個查詢,該查詢旨在返回給定列表中的聯系人。

// GET api/Contacts
        [Queryable]
        public IQueryable<Contact> GetContacts(int bulkListId)
        {
            var bulkList = db.BulkLists.Include(c => c.Contacts).Where(c => c.ID == bulkListId).SingleOrDefault();

            if (bulkList == null)
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));

            return bulkList.Contacts.AsQueryable().OrderBy(c => c.ID).Include(c => c.AddressBookType).Include(c => c.BulkLists);
        }

盡管此方法有效,但未按預期工作。 它會生成給定列表中的一組正確的聯系人,但是這些聯系人僅在其關系的Lists屬性中填充了該列表。 因此,當將此序列化並返回到客戶端時,它將隱藏聯系人所屬的其他列表。

我看不到查詢如何以這種方式過濾查詢以及如何更改查詢以包括完整的列表集。 任何建議將不勝感激。

你在作弊! :)

通過將AsQueryable()添加到bulkList.Contacts ,可以繼續使用Include而不會引起編譯器的抱怨。 但...

根據DbExtensions.Include上的MSDN

此擴展方法調用IQueryable源對象的Include(String)方法( 如果存在) 如果源IQueryable沒有匹配方法,則此方法不執行任何操作。

(強調我的)

而且EntityCollection沒有Include方法,因此什么也沒發生。

您必須在第一條語句中擴展包含列表,大概是這樣的:

db.BulkLists
    .Include(c => c.Contacts.Select(c => c.AddressBookType))
    .Include(c => c.Contacts.Select(c => c.BulkLists))

暫無
暫無

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

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