天天看點

EntityFramework Core Raw Query再叙注意事項後續前言

話說通過EntityFramwork Core進行原始查詢又出問題,且聽我娓娓道來。

當我們進行複雜查詢時我們會通過原始查詢來進行,我們定義如下ViewModel

我們接着在Blog倉儲接口中定義如下接口

接着我們實作其接口

然後為了在上下文中跟蹤到ViewModel是以我們在上下文中進行如下定義

到了這裡我們再來進行查詢肯定是沒毛病,接下來我們來說明進行原始查詢出現的問題。當我們需要用到ViewModel時就會去進行定義,我們是在進行遷移之後進行的,如果我們對實體進行了修改,此時我們就需要再進行遷移,下面我們進行遷移看看。

EntityFramework Core Raw Query再叙注意事項後續前言

我們定義的ViewModel未配置映射竟然映射到表中了,如上則是本節需要闡述的問題,當我們在進行遷移之後定義ViewModel,此時EF上下文會檢測到ViewModel并将其進行跟蹤,同理,當我們定義了ViewModel之後再進行遷移時EF上下文會檢測到ViewModel并将其作為實體映射到表,是以會出現意想不到的結果,這個算是bug嗎?應該不算,EF團隊既然想到需要将ViewModel定義到上下文中會将其進行跟蹤并映射到資料庫中,但是這個ViewModel并不是我們需要的實體,EF團隊肯定給出了解決方案,我尋思着既然對實體中的屬性可以進行忽略映射,那麼是否對實體也可以進行忽略映射呢,我們進行如下設定來忽略實體映射到表看看。

EntityFramework Core Raw Query再叙注意事項後續前言

到這裡我們本節的話題才算結束。

我們再來對EF中使用原始查詢做個最終總結,我們需要在上下文中定義ViewModel,但是我們不希望将其映射到表中,我們需要通過  modelBuilder.Ignore<ViewModel>(); 來忽略實體映射。