5

ASP.NET MVCのイメージギャラリーで遊んでいると同時に、LINQtoSQLに頭を悩ませようとしています。画像ギャラリーデータを保持するためのテーブルが3つあり、リンクテーブルを介して多くの関係があります。これらは :

ギャラリー
(ID、名前、説明)

画像
(ID、タイトル、説明、ファイル名)

GalleryImage
(GalleryId、ImageId)

GalleryImageには、他の2つのテーブルに対して設定されたFK関係があります。

ギャラリーを読み込んで、それぞれに関連付けられている画像を表示できるようにしたいだけでなく、単一の画像を表示して、関連付けられているギャラリーを一覧表示できるようにしたいです。私はLinqtoSQLを初めて使用するため、これを行う方法がわかりません。誰か案内してもらえますか?

4

4 に答える 4

2

ステップ1:テーブル間の関連付けを作成します。これが適切に行われることがわかります

  • クラスGalleryにはGalleryImagesプロパティがあります
  • クラスGalleryImageにはプロパティGalleryとImageがあります(注、単数)
  • クラスImageにはGalleryImagesプロパティがあります。

http://msdn.microsoft.com/en-us/library/bb629295.aspx

ステップ2:ギャラリーのリストを取得するには:

using (CustomDataContext myDC = new CustomDataContext)
{
  List<Gallery> result = myDC.Galleries.ToList();
}

ステップ3:次に、ユーザーがギャラリーをクリックすると、その画像が必要になります。

using (CustomDataContext myDC = new CustomDataContext)
{
  List<Image> result = myDC.Galleries
    .Where(g => g.Id = selectedGallery.Id);
    .SelectMany(g => g.GalleryImages)
    .Select(gi => gi.Image)
    .ToList()
}

ステップ4:次に、ユーザーが画像をクリックすると、そのギャラリーが必要になります。

using (CustomDataContext myDC = new CustomDataContext)
{
  List<Gallery> result = myDC.Images
    .Where(i => i.Id = selectedImage.Id);
    .SelectMany(i => i.GalleryImages)
    .Select(gi => gi.Galleries)
    .ToList()
}

データベース全体をロードするだけの場合は、次のようにします。

using (CustomDataContext myDC = new CustomDataContext)
{
  DataLoadOptions dlo = new DataLoadOptions();
  dlo.LoadWith<Gallery>(g => g.GalleryImages);
  dlo.LoadWith<GalleryImage>(gi => gi.Image);
  myDC.LoadOptions = dlo;

  List<Gallery> result = myDC.Galleries.ToList();
}

その後、オブジェクトグラフ全体が読み込まれ、接続されて使用できるようになります。

于 2010-06-29T14:29:44.467 に答える
1
Gallery.GalleryImages<GalleryImage>

それを介してGalleryImageオブジェクトにアクセスできるはずです。次に、各GalleryImageで次のコマンドを呼び出すことができます。

GalleryImage.Image

これは、関係がDBMLデザイナーで表されていることを前提としていますか?

于 2010-06-29T08:32:43.487 に答える
1

DataContextオブジェクトを介してこれらすべてにアクセスする必要があります。

生成されたdbmlのc#ファイルを調べて、Association属性でマークされたEntitySetコレクションを探します。GallaryとImageに1つ、GallaryImageに2つあるはずです。dbmlが正しく生成された場合、次のようなことができるはずです-

頭のてっぺんから、デザインの表面で複数のギャラリーがギャラリーではなくギャラリーとして名前が付けられると確信しているので、タイプミスではありません-

DataConext dc = new GalleryDataConext();
foreach (Gallery g in dc.Gallerys)
{
  Console.Writeline("gallery id " + g.Id.ToString());
  foreach(GalleryImage gi in g.GalleryImages)
   {
      Console.Writeline("galleryimage id " + gi.Id.ToString());
      foreach(Image i in gi)
       {
         Console.Writeline("image id " + i.Id.ToString());
       }
   }

関連付けがなくても、次のように機能するはずです-

int GalID = 1;
GalleryDataConext dc = new GalleryDataConext()
var pics = from g in dc.Gallary
           join gi in dc.GallaryImages on g.Id equals gi.GallaryId
           join i in dc.Images on gi.ImageId equals i.Id
           where g.Id = GalID
           select i;

写真IDからギャラリーを取得するには、次のようにします-

int PicID = 1;
var gals = from g in dc.Gallary
           join gi in dc.GallaryImages on g.Id equals gi.GallaryId
           join i in dc.Images on gi.ImageId equals i.Id
           where i.Id = PicID
           select g;

上記はあなたにを返し、あなたがIQueryable<Gallary>それを列挙するときにSQLクエリを実行します。

于 2010-06-29T13:48:31.227 に答える
-1

テーブル間に関係を作成する必要があります。関係を作成したことが確実な場合は、クラスの子または親のプロパティがインターネットに設定されている可能性があり、それらは公開されている必要があります

于 2010-06-29T14:07:03.660 に答える