如何在Entity Framework + SQL Server中实施一对一关系

Tom*_*ean 1 c# sql-server entity-framework

在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])
Run Code Online (Sandbox Code Playgroud)

在实体框架中,实体内容非常正确地认为这是一对多的关系。我该如何一对一制作?内容只能属于另一个实体,但是我必须在代码中继续使用First()。

<h1>@Model.Content.Articles.First().ArticleHeadline</h1>
@Html.Raw(Model.Content.Articles.First().ArticleBody)
Run Code Online (Sandbox Code Playgroud)

Lav*_*nde 5

对于数据库优先方法,要在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
)
Run Code Online (Sandbox Code Playgroud)