0

Linq 2 Sql を使用して、特注の CMS をすばやくノックアウトしています。

それ自体に関連付けられたテーブルがあるため、子メニューは同じテーブル内の親メニューにマップされますが、最初の親を挿入する際に問題が発生します。

テーブルは次のようになります。

CMSMenu
     CMSMenuID
     ParentCMSMenuID    
     Name
     Link

の協会で

CMSMenu.CMSMenuID -> CMSMenu.ParentCMSMenuID

以前のバージョンのデータベース/コードでは、次のようなコードを追加するだけでした:

  itm = new CMSMenu();
  itm.ParentCMSMenuID = 0; 
  rep.CMSMenus.InsertOnSubmit(itm);

ただし、このデータベースはすべての外部キーを使用して自動的に作成されるため、このコードでは例外が発生します。

INSERT ステートメントは、FOREIGN KEY SAME TABLE 制約 "CMSMenu_CMSMenu" と競合しました。データベース「sp.ackahs」、テーブル「dbo.CMSMenu」、列「CMSMenuID」で競合が発生しました。ステートメントは終了されました。

最上位のメニュー (つまり、親なし) を挿入するにはどうすればよいですか?

親がないため、追加できません:

itm.MyParentCMSMenu=*existing cmsmenu item*;

子メニューでできるように、追加することもできません:

itm.MyParentCMSMenu=null;

どんな考えでも大歓迎です。

ありがとうトビー

4

2 に答える 2

0

MyParentCMSMenuをSQLのnull許容列に設定してみてください。

于 2012-05-29T15:15:50.640 に答える
0

通常、CMSMenuアイテムの特別なバージョンが使用されます。「null」という名前で、IDが0または1の場合があります。実際には親がないアイテムの親として使用する必要があります。また、すべてのクエリから除外する必要があります。

これは、リレーショナルデータベースの弱点の1つです。ツリーのような単純な抽象化を格納するには、あらゆる種類の癖を使用する必要があります。

于 2012-05-29T15:05:58.443 に答える