首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF更新外键,它是主键的一部分。属性是对象的密钥信息的一部分,不能修改。

EF更新外键,它是主键的一部分。属性是对象的密钥信息的一部分,不能修改。
EN

Stack Overflow用户
提问于 2019-04-17 23:51:06
回答 1查看 182关注 0票数 0

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

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

例如,企业可以获得一个县,因此业务id是一个外键,而县id是另一个外键。这两个外键的组合是主要的关键,因为企业不能多次收购同一个县。应用程序中的一个功能允许用户进行传输,当时我想更新作为主键一部分的业务id。

调用context.SaveChanges时,代码将抛出一个错误

属性'business_id‘是对象的密钥信息的一部分,不能修改。

我的代码:

代码语言:javascript
复制
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

请告诉我如何更新这把钥匙。

EN

回答 1

Stack Overflow用户

发布于 2019-04-18 00:37:06

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

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

在我看来,为您的表定义一个单列主键是一个很好的实践.您的方案是一个例子,在许多情况下,您遇到了一个没有单列ID的表的问题.解决办法是定义一个。

我认为this question会有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55737405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档