2017-10-18 62 views
0

此问题被问到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 
+0

请提供一个tabla作为示例。 –

+0

@ H.Herzl表结构添加 –

+0

Sales.Store表包含一个名为FK_Store_BusinessEntity_BusinessEntityID的外键,表Person.BusinessEntity包含一个标识列,所以我猜你需要在插入子表之前保存该表,这是有道理的? –

回答

1

在AdventureWorks2016数据库中有一个名为Person.BusinessEntity的表,该表包含一个标识列。

查看Sales.Store表时,Person.BusinessEntity表存在外键。

因此,首先您需要保存在Person.BusinessEntity表上,然后保存在子表Sales.Store中。

在EF Core内部,您需要为您的实体添加配置,Person.BusinessEntity表的配置包含标识,并且Sales.Store需要具有必需的属性。

在保存中,您可以使用事务,使用DbContext实例中的Database属性。

如果你想生成从现有的数据库,你可以使用脚手架或其他工具,例如CatFactory

让我知道这是非常有用的EF核心对象。

+0

是的,非常感谢。 –

相关问题