我在SQL Server數據庫中定義了以下2個表:實體框架 - 有條件拉從主表和歷史表中的數據在一個查詢
CREATE TABLE [dbo].[FinancialItem](
[Id][bigint] identity(1,1) NOT NULL,
[TranId] [int] NOT NULL,
[Installment][int] NOT NULL,
[Amount][decimal](16,2) NOT NULL
CONSTRAINT [FinancialItem0] PRIMARY KEY
(
[Id] ASC
)
CREATE TABLE [dbo].[FinancialItemHistory](
[Id][bigint] NOT NULL,
[TranId] [int] NOT NULL,
[Installment][int] NOT NULL,
[Amount][decimal](16,2) NOT NULL
CONSTRAINT [FinancialItemHistory0] PRIMARY KEY
(
[Id] ASC
)
我使用實體框架4.x的與POCO實體。
實體框架代碼不會將任何數據寫入數據庫,它只是在那裏讀取其他服務創建的數據。如果可能的話,我想要做的是讓一個實體代表這兩個表中的兩個。 FinancialItem和FinancialItemHistory表具有相同的結構。當FinancialItem得到回報時,記錄從FinancialItem表移動到FinancialItemHistory表(它保持相同的Id)。如果我包含已付款項目,Entity Framework中是否有方法有條件地提取FinancialItemHistory記錄?我應該建立在本質上是做數據庫中查看此:
SELECT Id, TranId, Installment, Amount, 0 IsHistorical
FROM FinancialItem
UNION ALL
SELECT Id, TranId, Installment, Amount, 1 IsHistorical
FROM FinancialItemHistory
我想盡可能避免使用視圖,因爲比不了的時候,我會簡單地要拉駐留在FinancialItem表未付項目。我嘗試讓兩個實體都從同一個接口(IFinancialItem)派生,然後讓實體框架查詢該接口,但似乎Entity Framework不支持在IQueryable的上下文中映射到複雜類型。
權,但不會是暗示FinancialItemHistory和FinancialItem都是同一類型的? – 2012-04-24 20:12:03
對。我添加了解決方案。 – usr 2012-04-24 20:13:27
如果我需要在查詢中定義一個WHERE子句,然後過濾FinancialItem和FinancialItemHistory,該怎麼辦?如果不將字面數據全部帶入內存,然後進行類型轉換,然後過濾? – 2012-04-24 20:19:48