User テーブルと UserInfo テーブルの間に一方のオプションである 1 対 1 の関係を作成しようとしています。仕様では、UserInfo は正確に 1 つの User を持つ必要がありますが、User は 1 つまたはゼロの UserInfo を持つことができます。また、User テーブルの列が変更されないように、UserInfo テーブルに外部キーが存在する必要があります。C# LINQ-to-SQL でリレーションシップを使用したいと考えています (例: user.UserInfo.Email = "test@test.com",
userInfo.User` など)。
テーブルの T-SQL と UserInfos から Users への外部キーは (大まかに) 次のとおりです。
CREATE TABLE [dbo].[Users](
[UserId] [int] IDENTITY(1,1) NOT NULL,
[Username] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_dbo.Users] PRIMARY KEY CLUSTERED ( [UserId] ASC ),
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[UserInfos](
[UserInfoId] [int] IDENTITY(1,1) NOT NULL,
[UserId] [int] NOT NULL,
[Email] [varchar](250) NOT NULL,
CONSTRAINT [PK_UserInfo] PRIMARY KEY CLUSTERED ( [UserInfoId] ASC ),
CONSTRAINT [UQ_UserId] UNIQUE NONCLUSTERED ( [UserId] ASC )
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[UserInfos] WITH CHECK
ADD CONSTRAINT [FK_UserInfos.UserID_Users.UserId] FOREIGN KEY([UserId])
REFERENCES [dbo].[Users] ([UserId])
GO
ALTER TABLE [dbo].[UserInfos] CHECK CONSTRAINT [FK_UserInfos.UserID_Users.UserId]
GO
問題は、Users.UserId (主キー) から UserInfos.UserId への外部キーを定義すると (これは、オプションではない1 対 1 の関係を定義する正しい方法だと理解しています)、LINQ を実行することです。 -to-SQL コードuser.UserInfo = null
も を に設定user.UserId
しdefault(int)
ます。
Users
との間の外部キーを定義するために使用する T-SQL を次に示しますUserInfos
。
ALTER TABLE [dbo].[Users] WITH CHECK
ADD CONSTRAINT [FK_Users.UserId_UserInfos.UserId] FOREIGN KEY([UserId])
REFERENCES [dbo].[UserInfos] ([UserId])
GO
ALTER TABLE [dbo].[Users] CHECK CONSTRAINT [FK_Users.UserId_UserInfos.UserId]
GO
この外部キーを定義しないと、User
にアクセスできる LINQ-to-SQL プロパティが取得されませんUserInfo
。Users
テーブルとLINQ-to-SQL でトラバース可能な関係をどのように持つことができますか?UserInfos
同時に、この関係をUser
側から null にすることができますか? ありがとうございました。