当前位置: 首页 > 知识库问答 >
问题:

实体框架不拾取关系后主键更改在SQL服务器

宋飞文
2023-03-14

在Visual Studio 2013 Update 3中,在我将SQL Server 2012中的主键从SAM\u ID更改为ID In PERSON表后,基于实体框架5.0的数据模型没有拾取pk fk关系。

所有约束都已重新创建,没有出现任何问题。SQL Server中的图表显示了正确的关系。

我尝试在Visual Studio中清理解决方案并重新创建ADO. NET实体数据模型,但保存主键的表和保存外键的表之间仍然没有关系。

主键表人员:

CREATE TABLE [dbo].[PERSON](
    [ID] [int] IDENTITY(100001,1) NOT NULL,
    [SAM_ID] [varchar](128) NOT NULL,
    [NAME] [varchar](256) NOT NULL,
    [MANAGER_SAMID] [varchar](128) NULL,
    [IMAGE_ID] [int] NULL,
    [MANAGER_ID] [int] NULL,
 CONSTRAINT [PK_PERSON_1] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

外键表信息:

CREATE TABLE [dbo].[INFO](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [PID] [int] NOT NULL,
    [PERSON_ID] [varchar](128) NOT NULL,
    [TITLE] [varchar](512) NOT NULL,
    [DESCRIPTION] [varchar](max) NULL,
 CONSTRAINT [PK_INFO] PRIMARY KEY CLUSTERED 
(
    [ID] 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

ALTER TABLE [dbo].[INFO]  WITH CHECK ADD  CONSTRAINT [FK_INFO_PERSON] FOREIGN KEY([PID])
REFERENCES [dbo].[PERSON] ([ID])
GO

ALTER TABLE [dbo].[INFO] CHECK CONSTRAINT [FK_INFO_PERSON]
GO

我能试试什么?

共有2个答案

莫振
2023-03-14

我对VS2013更新4也有类似的问题:模型图没有显示我的表关系。我最初对最终更改为PK的列有唯一的索引约束。从PK中删除唯一索引约束后,模型关系图可以拾取表关系。

陆沈浪
2023-03-14

这篇SO帖子提供了一个提示,它起到了作用:https://stackoverflow.com/questions/20576610/entity-framework-db-first-not-picking-up-relation

在更改PK之前,我在将要进行的PK上添加了一个唯一的约束。显然,在将其作为PK之后,需要移除唯一的约束。

 类似资料:
  • 我有一个带有表的旧数据库,该表只有一行,没有主键。当我尝试更新此行时,什么都没有发生。我搜索了很多,找到了这行代码(dbf.Entry(nextPro))。状态=实体状态。已修改;) 。添加此代码时,我遇到了错误:“无法跟踪类型为‘NxtId’的实例,因为它没有主键。只能跟踪具有主键的实体类型。” 我无法删除该行并添加新行。我无法添加主键。我有唯一的选择来以某种方式更新行。 实体:

  • 我想将类的外键从列表映射到类的主键。实体框架在子问题中没有建立这种关系。 我的形式类。 我的问题课。 IEntityTypeConfiguration中的配置应该是什么样子?

  • 问题内容: 我有两个表: 通常,我会创建一个映射表’ ‘来将这些表链接成多对多关系。 这是最好的方法吗?我应该将s的列表存储在xml列中,而不是存储在“事件”表中吗? 我使用带有Linq的.NET 3.5 / 4作为DAL(尽管我认为这可能与所提出的设计问题无关)。 有兴趣看看人们的意见是什么。 谢谢。戴夫 问题答案: 映射表绝对是执行此操作的最佳方法-实体框架会将映射表转换为两侧的实体集合,并且

  • 情况: 我有两个与OneTomany/ManyToone关系相关的实体。 想象一下,每个类也有一个名为id和getter和setter的PK。 问题: 如果我创建一个EntityA实例并设置一个与已经存在的EntityB实例的关系并持久化这个新实例,那么所有数据都会正确地保存到数据库中。但是,如果我从我的EntityManager请求EntityB的实例,它的列表中将不包含刚刚持久化的Entity

  • 我正在使用实体框架管理我的sql server ce数据库。我希望我的表的主键由其他表的几个外键组成。我希望这样的事情能奏效: 但它会导致以下数据库迁移错误: 票据打印机。Bill::EntityType“Bill”没有定义键。定义此EntityType的键。Bills:EntityType:EntitySet“Bills”基于未定义键的类型“Bill”。 如何使表具有由这三个外键组成的主键?

  • 在实体框架中,我想使用两个外键作为另一个实体类型的主键。 但是,这会给我一个缺少键的错误。 我知道我可以定义另外两个属性来保存引用实体类型的主键。Visual Studio是否不够聪明,无法自行使用它们的主键?