此问题被问到on MSDN,但从未真正回答过。如何在AdventureWorks2016中使用BusinessIdentityId插入新记录
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
请提供一个tabla作为示例。 –
@ H.Herzl表结构添加 –
Sales.Store表包含一个名为FK_Store_BusinessEntity_BusinessEntityID的外键,表Person.BusinessEntity包含一个标识列,所以我猜你需要在插入子表之前保存该表,这是有道理的? –