I’d like to use generalization in my EF model (.edmx) using an abstract base entity.
So I made the following

I set the abstraction flag on the base entity

The expected output would something like the following

However when I look at the generated SQL I notice that it’s creating my abstract base table which I do not want.
The problem is that the Id in either ConcreteEntity_A or ConcreteEntity_B can be the same so if it’s also being added to the base entity I have a problem.
-- 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
Have I misunderstood the use of abstract entities?
No you didn’t but it is simply the way how EF works if you use relation with the base entity – entity must have a table (even if it is abstract) to be able to create relation. If you want the expected model you must move the relation to derived tables.