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

时间:2019-04-17 23:51:06

标签: sql-server entity-framework sql-server-2012

在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

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

1 个答案:

答案 0 :(得分:1)

  

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

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

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

我认为this question会有所帮助。