作为主键一部分的 EF 更新外键。该属性是对象键信息的一部分,无法修改



在SQL Server数据库中,我有一个包含三列的表。我在项目中使用实体框架进行数据库操作。此表不需要ID列,因为它不会被其他表引用。

但它有两个外键约束和一个主键,这两个外键的组合。这就是我希望将数据存储在表中的方式。

例如,企业可以获取一个县,因此企业 ID 是一个外键,县 ID 是另一个外键。这两个外键的组合是主键,因为企业不能多次获取同一个县。应用程序中的功能之一允许用户进行转移,当时我想更新作为主键一部分的业务 ID。

在调用context.SaveChanges时,代码抛出错误

属性"business_id"是对象密钥信息的一部分,无法修改。

我的代码:

CREATE TABLE [dbo].[BusinessCounty]
(
[BusinessId] [int] NOT NULL,
[CountyId] [smallint] NOT NULL,
[Active] [tinyint] NULL,
CONSTRAINT [PK_10_3] 
PRIMARY KEY NONCLUSTERED ([BusinessId] ASC, [CountyId] ASC)
)
GO
ALTER TABLE [dbo].[BusinessCounty] 
ADD CONSTRAINT [FK_11_4] 
FOREIGN KEY([BusinessId]) REFERENCES [dbo].[Business] ([ID])
GO
ALTER TABLE [dbo].[BusinessCounty]  
ADD CONSTRAINT [FK_15_3] 
FOREIGN KEY([CountyId]) REFERENCES [dbo].[County] ([ID])
GO

请告知我如何更新此密钥。

此表不需要ID列,因为它不需要 由其他表引用。

这个假设是错误的。ID 列不存在,因此其他表可以引用它。ID 的最基本用途是充当聚类键,即使您没有为表定义显式 ID,也会在内部生成一个。

在我看来,为您的表定义单列主键是一个很好的做法......您的方案就是一个例子,在很多方案中,您遇到表没有单列 ID 的问题...解决方案是定义一个。

我认为这个问题会有所帮助。

相关内容

最新更新