Piranha CMS は、プログラマー向けの CMS です (前回反対票を投じられたので、書きたいと思います!)。この問題を解決するために午後中ずっと費やしました: Sql Compact Server データベースから SQL Server データベースに移行しようとしても、空の SQL Server データベースですべてを最初から開始しようとしても、次のエラーが発生します。
テーブル 'category' に FOREIGN KEY 制約 'FK_dbo.category_dbo.sysuser_category_updated_by' を導入すると、サイクルまたは複数のカスケード パスが発生する可能性があります。ON DELETE NO ACTION または ON UPDATE NO ACTION を指定するか、他の FOREIGN KEY 制約を変更します。
最初のステップ (管理者アカウントとパスワードの作成) には合格できますが、ログインしようとするたびにこの例外がスローされます。
私は何を間違っていますか?
ご協力いただきありがとうございます !
アップデート
スタックは、エラーの発生元を示します。
[HttpException (0x80004005): The pre-application start initialization method
Start on type Piranha.Web.ApplicationModule threw an exception with the following
error message: Introducing FOREIGN KEY constraint
'FK_dbo.category_dbo.sysuser_category_updated_by' on table 'category'
may cause cycles or multiple cascade paths. Specify ON
DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors..]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9915300
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr,
HttpContext context) +254
Piranha.Web.ApplicationModule の Method Start に問題があるようです。
また、Entity Framework の構成が次のようになっていることに気付きました。
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
私は次のことについて疑問に思います:
invariantName="System.Data.SqlClient
System.Data.SqlClient は、接続文字列で言及されているプロバイダーであるためです。ただし、データの取得に EF が使用されていることを意味するだけなので、関連性があるかどうかはわかりません。しかし、内部スクリプトと EF の両方が、言及されているこのプロバイダーでこの接続文字列を使用するため、競合が発生しないのではないかと思います。また、よくわかりませんが、コードファーストの EF では、データベースの作成時にメタデータも作成されることがわかっています。おそらく、内部スクリプトがそれらを作成しないため、EF は DB が存在しないと見なしますか?
更新 2
私はいくつかのニュースを持っています、私は追加しました
Database.SetInitializer<Piranha.DataContext>(null);
Application_Start で、データベースの再作成を回避します。データベースの再作成の問題は解決したようです。制約に関する例外は表示されなくなりました。ただし、ログインしようとした後、PageController は null 参照例外をスローし、公開 Web サイトのページはまだ表示されません (公開サイトは内部サーバー エラーをスローします)。私の推測では、Initializer を null に設定すると、EF がフレームワークの基本データを DB に取り込むこともできなくなります。これは良い一歩なので、問題は Piranha DataContext 構成にあるようです。
アップデート 3
詳細を説明するだけです:
ログインしようとすると、前に述べたように null 参照例外をスローするマネージャー/ページにリダイレクトされます。この例外は、マネージャーのほとんどのページにアクセスしようとするとスローされますが (テンプレート/ページリスト、設定/ユーザーリストを試しました)、「マネージャー/投稿」を試みると、次のエラーが発生します。
Invalid object name 'dbo.post'.
Exception Details: System.Data.SqlClient.SqlException: Invalid object name 'dbo.post'.
しかし、「post」テーブルはデータベースに存在します...これは新規インストールです。変更したのは、接続文字列と、Global Asax に追加したデータベース初期化コードの 2 つだけです。