2012-07-27 77 views
1

我想使用抽象基础实体在我的EF模型(.edmx)中使用泛化。使用抽象实体

所以,我提出以下

abstract entity

我设置了抽象的标志上基础机构

abstract setting

预期的输出将类似于下面的

desired result

但是,当我查看生成的SQL时,我注意到它创建了我不想要的抽象基表。 问题是,在ConcreteEntity_A或ConcreteEntity_B中的Id可以是相同的,所以如果它也被添加到基本实体,我有问题。

-- Creating table 'AbstractBaseSet' 
CREATE TABLE [dbo].[AbstractBaseSet] (
    [Id] int NOT NULL 
); 
GO 

-- Creating table 'AbstractBaseSet_ConcreteEntity_A' 
CREATE TABLE [dbo].[AbstractBaseSet_ConcreteEntity_A] (
    [Id] int NOT NULL 
); 
GO 

-- Creating table 'AbstractBaseSet_ConcreteEntity_B' 
CREATE TABLE [dbo].[AbstractBaseSet_ConcreteEntity_B] (
    [Id] int NOT NULL 
); 
GO 

我误解了抽象实体的用法吗?

回答

0

不,你没有,但它只是EF如何使用与基本实体关系的工作方式 - 实体必须有一个表(即使它是抽象的)才能创建关系。如果您需要预期的模型,则必须将关系移至派生表。

+0

当我将关系移动到派生表时,基表仍然被创建 – 2012-07-27 09:15:21

+1

您首先使用模型(从模型生成数据库)吗?模型首先使用TPT继承,其中基类拥有自己的表。 – 2012-07-27 09:54:21

+0

是的,我先使用模型,现在要改变它已经晚了。所以我想我不能在这里使用泛化:( – 2012-07-27 09:59:16