gpt4 book ai didi

c# - 如何在 Entity Framework + SQL Server 中强制执行一对一关系

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:06 29 4
gpt4 key购买 nike

在 EF + SQL Server(数据库优先)中构建我自己的迷你 CMS 后端。我有一个“内容”表,所有实体也使用外键链接。

CREATE TABLE [dbo].[Contents](
[ContentID] [int] IDENTITY(1,1) NOT NULL,
[ContentType] [varchar](100) NOT NULL,
[DateAdded] [datetime] NOT NULL,
[DateUpdated] [datetime] NULL,
[isDeleted] [bit] NOT NULL,
[UserId] [int] NOT NULL

CREATE TABLE [dbo].[Articles](
[ArticleID] [int] IDENTITY(1,1) NOT NULL,
[ContentID] [int] NOT NULL,
[ImageID] [int] NOT NULL,
[ArticleHeadline] [varchar](250) NOT NULL,
[ArticleSummary] [nvarchar](200) NOT NULL,
[ArticleBody] [nvarchar](500) NOT NULL

ALTER TABLE [dbo].[Articles] WITH CHECK ADD CONSTRAINT [FK_Articles_Contents] FOREIGN KEY([ContentID])
REFERENCES [dbo].[Contents] ([ContentID])

在 Entity Framework 中,实体内容非常正确地认为这是一对多关系。我该如何去做这个一对一的?内容只能属于另一个实体,但我一直不得不在我的代码中使用 First()。

<h1>@Model.Content.Articles.First().ArticleHeadline</h1>
@Html.Raw(Model.Content.Articles.First().ArticleBody)

最佳答案

至于数据库优先方法,要在 EF 中有 1-1 关联,从属 ([dbo].[Articles]) 必须有一个主键,该主键也是主体 ([dbo].[Contents) 的外键]).这将需要像这样的一些数据库设计更改:

CREATE TABLE [dbo].[Contents](
[ContentID] [int] NOT NULL PRIMARY KEY,
[ContentType] [VARCHAR](100) NOT NULL
)

CREATE TABLE [dbo].[Articles](
[ContentID] [int] NOT NULL PRIMARY KEY,
[ImageID] [int] NOT NULL,
CONSTRAINT [FK_Contents] FOREIGN KEY ([ContentID]) REFERENCES [dbo].[Contents] ([ContentID]) ON DELETE CASCADE
)

关于c# - 如何在 Entity Framework + SQL Server 中强制执行一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31230643/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com