簡體   English   中英

在LINQ中更改實體條件

[英]Change an entity condition in linq

在實體設計器中,我在實體上設置條件映射,在該實體上它通過“不活動”字段過濾所有客戶。

這樣做沒有問題,但問題出在我的linq中。

當我需要將客戶設置為“ IsActive = false”時會發生什么。 該屬性未映射到我的實體,因為條件已映射,但是在Linq中我找不到改變它的方法。

using (var db = new CustDbConn())
{

   Customer customer= db.Customers.Single(p => p.Id == idFromEmail);
   customer.IsActive = false; //<----NOT FOUND, can not resolve 'isActive'

}

必須有一種方法可以訪問和更改LINQ中的條件,有人可以對此有所了解嗎? 我考慮過繞過模型,而只是使用SqlCommand更新它,但是我不必經歷所有這些事情。

您不能使用LINQ查詢來更改模型(這就是您要嘗試做的)。

操縱IsActive屬性的唯一方法是將其帶入Customer模型,並丟棄條件映射。

UPD

您誤解了條件映射的主要目的- 繼承
請注意,使用EF不能使用數據庫表 ,而可以使用實體類型 您所擁有的只是一個模型。 如果模型中缺少任何表字段,則無法通過模型訪問它。 關於您的問題,是的,您不能更改患者的活動狀態,因為模型中沒有活動狀態

是的,如果您打算使用某種刪除/活動標記(例如您的示例中的IsActive ),則必須在查詢中包括它,否則結果中將得到非活動/已刪除的項目。 當然,您可以使helper / repository / wrapper / etc自動化:

interface IEntity
{
    int Id { get; }
    bool IsActive { get; set; }
}

interface IRepository<T>
    where T : IEntity
{
    IQueryable<T> Get(bool includeInactiveEntities = false);
}

暫無
暫無

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

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