Nhibernateのスキーマツールで生成され、既知のPartyIdを入力しようとすると以下のエラーが発生し、エラーが表示されないSql Serverデータベースがあります。私はがFK制約がのPartyIdが存在しなければならないと言っていると思うデバッグ外部キー制約エラー
(私が示すよログ出力は、NHibernateはを使用してテストランからでさえカントー、私は手動でNHibが生成されたSQL ServerのDBを使用して、エラーを複製することができます)まず、私が言うように - そうです。
私はSQL Server 2008管理スタジオを持っていますが、めったに使用せず、私が必要とするまれな時間にVisual Studioからアクセスすることを好みます。だから私は2つの基本的な質問があります
- Visual StudioからSQL Serverのddlを見るにはどうすればいいですか?
- FK制約の問題をデバッグして修正するにはどうすればよいですか?
NHib
create table PartyNames (
PartyNameId INTEGER not null,
PartyId INTEGER not null,
RequiredName TEXT not null,
EverythingElse TEXT,
ContextUsed TEXT,
Salutation TEXT,
EffectiveStart DATETIME,
EffectiveEnd DATETIME,
primary key (PartyNameId)
)
create table Parties (
PartyId INTEGER not null,
Type TEXT not null,
primary key (PartyId)
)
によって生成されたDDL ERROR
NHibernate: INSERT INTO Parties (Type, PartyId) VALUES ('PERSON', @p0);@p0 = 98304 [Type: Int32 (0)]
NHibernate: INSERT INTO Parties (Type, PartyId) VALUES ('PERSON', @p0);@p0 = 98305 [Type: Int32 (0)]
NHibernate: INSERT INTO Parties (Type, PartyId) VALUES ('PERSON', @p0);@p0 = 98306 [Type: Int32 (0)]
NHibernate: select next_hi from hibernate_unique_key with (updlock, rowlock)
NHibernate: update hibernate_unique_key set next_hi = @p0 where next_hi = @p1;@p0 = 5 [Type: Int32 (0)], @p1 = 4 [Type: Int32 (0)]
NHibernate: INSERT INTO
PartyNames (PartyId, RequiredName, EverythingElse, ContextUsed, Salutation, EffectiveStart, EffectiveEnd, PartyNameId)
VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7);
@p0 = 98304 [Type: Int32 (0)],
@p1 = 'Hesh' [Type: String (50)],
@p2 = 'Berryl;;;' [Type: String (4000)],
@p3 = 'Stack Overflow Profile' [Type: String (50)],
@p4 = 'Fellow Geek' [Type: String (20)],
@p5 = 7/29/2011 4:55:19 PM [Type: DateTime (0)],
@p6 = 12/31/9999 11:59:59 PM [Type: DateTime (0)],
@p7 = 131072 [Type: Int32 (0)]
Test 'Parties.Data.Impl.NHib.Tests.TestFixtures.BaseDataTestFixtures.SqlServerCommandExecutor.GenerateTestData' failed: NHibernate.Exceptions.GenericADOException : could not insert: [Parties.Domain.Names.PartyName#131072][SQL: INSERT INTO PartyNames (PartyId, RequiredName, EverythingElse, ContextUsed, Salutation, EffectiveStart, EffectiveEnd, PartyNameId) VALUES (?, ?, ?, ?, ?, ?, ?, ?)]
----> System.Data.SqlClient.SqlException :
The INSERT statement conflicted with the FOREIGN KEY constraint "Party_PartyName_FK".
The conflict occurred in database "PartyDomainDb", table "dbo.Parties", column 'PartyId'.
はスクリプト
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[PartyNames](
[PartyNameId] [int] NOT NULL,
[PartyId] [int] NOT NULL,
[RequiredName] [nvarchar](50) NOT NULL,
[EverythingElse] [nvarchar](255) NULL,
[ContextUsed] [nvarchar](50) NULL,
[Salutation] [nvarchar](20) NULL,
[EffectiveStart] [datetime] NULL,
[EffectiveEnd] [datetime] NULL,
PRIMARY KEY CLUSTERED
(
[PartyNameId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[PartyNames] WITH CHECK ADD CONSTRAINT [Party_FK] FOREIGN KEY([PartyId])
REFERENCES [dbo].[Parties] ([PartyId])
GO
ALTER TABLE [dbo].[PartyNames] CHECK CONSTRAINT [Party_FK]
GO
ALTER TABLE [dbo].[PartyNames] WITH CHECK ADD CONSTRAINT [Party_PartyName_FK] FOREIGN KEY([PartyNameId])
REFERENCES [dbo].[Parties] ([PartyId])
GO
ALTER TABLE [dbo].[PartyNames] CHECK CONSTRAINT [Party_PartyName_FK]
GO
USE [PartyDomainDb]
GO
/****** Object: Table [dbo].[Parties] Script Date: 07/29/2011 18:22:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Parties](
[PartyId] [int] NOT NULL,
[Type] [nvarchar](255) NOT NULL,
PRIMARY KEY CLUSTERED
(
[PartyId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
FOREIGN KEY制約の定義はどこですか? –
@ypercube。私はそれがVisual StudioまたはSQL Server Mgt Studioでどのように見つけられるのかという疑問の一部です。 – Berryl
Mgt Studio(オブジェクトエクスプローラ)では、テーブル - >スクリプトテーブル - > CREATE To - > Clipboard(またはファイルまたはエディタウィンドウ) –