这个问题被问到on MSDN但从未真正回答。
AdventureWorks2016使用“BusinessEntityId”作为多个表的主键。它不是标识列,但在使用它的所有表中都是唯一的,例如Sales.Store。
所以问题是,保存新记录时ID会从何而来?必须调用存储过程来获取下一个有效ID似乎很笨拙。
例如,如果我正在使用实体框架,我根本看不到它是如何工作的,但它应该专门用于在EF中展示继承。
我发现这种类型的结构很有用,但是没看到如何让它与EF Core一起使用。
CREATE TABLE [Sales].[Store](
[BusinessEntityID] [int] NOT NULL,
[Name] [dbo].[Name] NOT NULL,
[SalesPersonID] [int] NULL,
[Demographics] [xml](CONTENT [Sales].[StoreSurveySchemaCollection]) NULL,
[rowguid] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[ModifiedDate] [datetime] NOT NULL,
CONSTRAINT [PK_Store_BusinessEntityID] PRIMARY KEY CLUSTERED
CREATE TABLE [Person].[Person](
[BusinessEntityID] [int] NOT NULL,
[PersonType] [nchar](2) NOT NULL,
[NameStyle] [dbo].[NameStyle] NOT NULL,
[Title] [nvarchar](8) NULL,
[FirstName] [dbo].[Name] NOT NULL,
[MiddleName] [dbo].[Name] NULL,
[LastName] [dbo].[Name] NOT NULL,
[Suffix] [nvarchar](10) NULL,
[EmailPromotion] [int] NOT NULL,
[AdditionalContactInfo] [xml](CONTENT [Person].[AdditionalContactInfoSchemaCollection]) NULL,
[Demographics] [xml](CONTENT [Person].[IndividualSurveySchemaCollection]) NULL,
[rowguid] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[ModifiedDate] [datetime] NOT NULL,
CONSTRAINT [PK_Person_BusinessEntityID] PRIMARY KEY CLUSTERED
(
[BusinessEntityID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
答案 0 :(得分:1)
在AdventureWorks2016数据库中有一个名为Person.BusinessEntity的表,该表包含一个标识列。
查看Sales.Store表,Person.BusinessEntity表有一个外键。
因此,首先需要保存Person.BusinessEntity表,然后在子表中保存Sales.Store。
在EF Core内部,您需要为实体添加配置,Person.BusinessEntity表的配置包括身份,Sales.Store需要具有必需的属性。
在保存中,您可以使用DbContext实例中的Database属性来使用事务。
如果要从现有数据库生成ef核心对象,可以使用脚手架或其他工具,例如CatFactory
请告诉我这是否有用。