我在 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
)
我将 Entity Framework 4.x 与 POCO 实体一起使用。
实体框架代码不会将任何数据写入数据库,它只是用于读取另一个服务创建的数据。如果可能的话,我想做的是让一个实体代表这两个表。FinancialItem 和 FinancialItemHistory 表具有相同的结构。当一个 FinancialItem 得到还清时,记录从 FinancialItem 表移动到 FinancialItemHistory 表(它保持相同的 Id)。如果我包括已付清的项目,实体框架中是否可以有条件地提取 FinancialItemHistory 记录?我是否应该在数据库中创建一个基本上执行此操作的视图:
SELECT Id, TranId, Installment, Amount, 0 IsHistorical
FROM FinancialItem
UNION ALL
SELECT Id, TranId, Installment, Amount, 1 IsHistorical
FROM FinancialItemHistory
如果可能,我想避免使用视图,因为更多时候我只想提取驻留在 FinancialItem 表中的未付款项。我尝试让两个实体都从同一个接口(IFinancialItem)派生,然后让实体框架查询该接口,但似乎实体框架不支持映射到 IQueryable 上下文中的复杂类型。