2012-07-27 103 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