【问题标题】:EF update foreign key that is part of primary key. The property is part of the object's key information and cannot be modifiedEF 更新作为主键一部分的外键。该属性是对象的关键信息的一部分,不能修改
【发布时间】:2019-04-17 23:51:06
【问题描述】:

在 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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    我认为this question 会有所帮助。

    【讨论】:

    • 好的,我知道每个表都需要有一个主键,我可以在这里定义一个。但是要实现商县结合的唯一性,是否应该定义唯一性约束?
    猜你喜欢
    • 1970-01-01
    • 2011-03-12
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多