EF Code Firstでは、次のようにコーディングすることで 1 対 1 の関係を作成できます。
public class User
{
public int UserID {get;set;}
public string Name {get;set;}
public int UserDetailID {get;set;}
public UserDetail Detail {get;set;}
}
public class UserDetail
{
public int UserDetailID {get;set;}
public string Address {get;set:}
public int UserID {get;set;}
public User User {get;set;}
}
しかし、Visual Studio 2012 で最初に EF データベースを使用して同じ関係を作成しようとしたときに、問題が発生しました。これが私のコードです:
CREATE TABLE [dbo].[Users] (
[UserID] UNIQUEIDENTIFIER CONSTRAINT [DF_Users_UserID] DEFAULT (newid()) NOT NULL,
[UserDetailID] UNIQUEIDENTIFIER NOT NULL,
[Name] NVARCHAR (50) NOT NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ([UserID] ASC),
CONSTRAINT [FK_Users_UserDetails] FOREIGN KEY ([UserDetailID]) REFERENCES [UserDetails]([UserDetailID])
);
CREATE TABLE [dbo].UserDetails] (
[UserDetailID] UNIQUEIDENTIFIER CONSTRAINT [DF_UserDetails_UserDetailID] DEFAULT (newid()) NOT NULL,
[UserID] UNIQUEIDENTIFIER NOT NULL,
[Address] NVARCHAR(100) NOT NULL,
CONSTRAINT [PK_UserDetails] PRIMARY KEY CLUSTERED ([UserDetailID] ASC),
CONSTRAINT [FK_UserDetails_Users] FOREIGN KEY ([UserID]) REFERENCES [dbo].[Users] ([UserID])
エラーメッセージは次のようなものです
"Error 2 SQL01767: Foreign key 'FK_Users_UserDetails' references invalid table 'UserDetails'.
このエラーの理由は、おそらく外部キー「UserDetailID」を参照しようとしたときに、まだ作成されていないことが判明したためだと思います。しかし、私はこれを修正する方法がわかりません。また、これがその方法であることも知りません。EF との 1 対 1 の関係を行うのは難しいことも知っています。また、不可能だと言う人もいます。誰でも私に何か提案をしてもらえますか? ありがとうございました。
更新:私のケースを明確にするために、Visual Studio 2012 データベース プロジェクトでデータベースを設計し、それを SQL サーバーに公開し、その後、SQL サーバーのデータベースから .edmx ファイルを作成/更新しようとしています。EF が正しく認識できる 1 対 1 の関係を作成し、.edmx ファイルに適切なクラスを作成する方法がわかりません。