0

と の 2 つのテーブルがAppointmentありUserます。予定は、学生と職員の 2 人の異なるユーザーにリンクできます。テーブルには、 とのAppointment2 つの外部キーが含まれています。これらは、(テーブルの PK) および(UNIQUE インデックス)という名前のテーブル内の列を参照します。テーブルの定義は次のとおりです。StaffUsernameExternalIDUserUsernameUserExternalID

CREATE TABLE [dbo].[Appointment]
(
    [ID] INT NOT NULL IDENTITY(1,1),
    [AppointmentTypeID] INT NOT NULL,
    [StartTime] DATETIME NOT NULL,
    [EndTime] DATETIME NOT NULL,    
    [AppointmentSlotID] INT NULL,    
    [StaffUsername] NVARCHAR(200) NOT NULL,
    [ExternalID] NVARCHAR(10) NULL,
    [BookedBy] NVARCHAR(200) NOT NULL,
    [BookedTimestamp] DATETIME NOT NULL,
    [ReminderEmailSentTimestamp] DATETIME NULL,
    [CancelledBy] NVARCHAR(200) NULL,
    [CancelledTimestamp] DATETIME NULL,
    [StudentDidNotAttend] BIT NULL,
    [LastModifiedTimestamp] DATETIME NOT NULL,
    [LastModifiedBy] NVARCHAR(200) NOT NULL,
    CONSTRAINT [PK_Appointment] PRIMARY KEY CLUSTERED ([ID] ASC),
    CONSTRAINT [FK_Appointment_AppointmentType] FOREIGN KEY ([AppointmentTypeID]) REFERENCES [dbo].[AppointmentType]([ID]),
    CONSTRAINT [FK_Appointment_AppointmentSlot] FOREIGN KEY ([AppointmentSlotID]) REFERENCES [dbo].[AppointmentSlot]([ID]),
    CONSTRAINT [FK_Appointment_User_StaffUsername] FOREIGN KEY ([StaffUsername]) REFERENCES [dbo].[User]([Username]),
    CONSTRAINT [FK_Appointment_User_ExternalID] FOREIGN KEY ([ExternalID]) REFERENCES [dbo].[User]([ExternalID])
)
CREATE TABLE [dbo].[User]
(
    [Username] NVARCHAR(200) NOT NULL,
    [FirstName] NVARCHAR(200) NULL,
    [LastName] NVARCHAR(200) NULL,
    [EmailAddress] NVARCHAR(200) NULL,
    [IsStaff] BIT NOT NULL DEFAULT 0,
    [ExternalID] NVARCHAR(10) NOT NULL,
    [LastLogin] DATETIME NULL,
    CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED ([Username] ASC),
    CONSTRAINT [UQ_ExternalID] UNIQUE ([ExternalID])
)

残念ながら、EDMX モデル デザイナーで [データベースからモデルを更新ExternalID] オプションを使用すると、列の外部キーが取得されません。このままです (緑で強調表示されているのは、正しくモデル化された関係に関連するプロパティです。黄色で強調表示されているのは、2 番目の関係に関連しているはずなのに無視されているプロパティです)。 テーブル間の関係が欠落している EDMX Designer を示すスクリーンショット

経験から、特にオブジェクトの変更を検出する場合、EDMX デザイナーが時々風変わりになる可能性があることを知っているので、通常のトリックをすべて試しました。Web.config接続文字列が正しいデータベースを指していることを確認しました。デザイナーでテーブルAppointmentとテーブルを完全に削除し、更新コマンドを再度実行しました。削除と更新の間にVisual Studioを保存して再起動することも試しました。User

データベースで関係が正しいことを確認するために、問題のある関係を正しく示す SSMS でデータベース ダイアグラムを作成しました。

SSMS データベース ダイアグラムのテーブル リレーションシップを示すスクリーンショット

また、新しいプロジェクトを作成し、同じ資格情報を持つ同じデータベースを指す新しいエンティティ データ モデルを追加しました。これは、問題が既存のモデルを更新しているがサイコロがないという事実に関連している場合に備えてです。新しいプロジェクトでも、関係は検出されません。

また、ナビゲーション プロパティを手動で作成しようとしましたが、このスクリーンショットからわかるように、選択する必要がある外部キーがドロップダウン リストで使用できません。

Visual Studio の [ナビゲーション プロパティの追加] ウィンドウのスクリーンショット

ExternalIDこの問題が、列がテーブルの主キーではないという事実に関係しているのUserか、それともそのNVARCHAR(10)データ型に関係しているのかはわかりません。正直なところ、わかりません。

この外部キーが検出されない理由について何か提案はありますか? どうすれば修正できますか?私のプロジェクトは .NET Framework 4.6 を対象としており、EF6 を使用しています。明らかに、私はデータベース ファーストを使用しています。

4

1 に答える 1