3

SQLServerデータベースで次の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
   )

POCOエンティティでEntityFramework4.xを使用しています。

Entity Frameworkコードはデータベースにデータを書き込みません。別のサービスによって作成されたデータを読み取るために、データベースにデータを書き込むだけです。私がやりたいのは、可能であれば、これらのテーブルの両方を1つのエンティティで表すことです。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クエリを実行しようとしましたが、EntityFrameworkはIQueryableのコンテキスト内の複雑な型へのマッピングをサポートしていないようです。

4

1 に答える 1

2

エンティティ フレームワークではunion all、メソッドを使用して実行しますConcat。2 つの異なる型を結合したい場合は、最初に次のように両方を共通の型に変換する必要があります。

var table1 = ...;
var table1 = ...;
var unionAll = table1.Select(x => new { x.ID, ... }).Concat(table2.Select(x => new { x.ID, ... }));
于 2012-04-24T20:05:08.613 に答える