3

既存の多言語データベースを使用して LinqToSQL をいじっていますが、かなり重要な 1 対 1 の関係をマッピングする際に問題が発生しているため、データベース設計でこの機能を誤って使用していると思われます。

Category と CategoryDe​​tail という 2 つのテーブルがあるとします。カテゴリには、CategoryId (PK)、ParentId、および TemplateId が含まれます。CategoryDe​​tail には、CategoryId (FK)、LanguageId、Title、Description (適切な言語) が含まれ、CategoryId と LanguageId の組み合わせ PK が含まれます。

これらのテーブルを LinqToSQL デザイナーにドラッグ アンド ドロップすると、結果のオブジェクト モデルには、CategoryDe​​tail オブジェクトのコレクションを含む Category が含まれますが、これは決して当てはまりません。つまり、Category.CategoryDe​​tails 内にカプセル化されたすべての言語バージョンではなく、Category.CategoryDe​​tail 内にカテゴリ全体がカプセル化されます。

このデータベースは、私の古いオブジェクト ライブラリ (昔ながらのカスタム BOL および DAL) では正常に機能しましたが、必要な結果を得るためには、LinqToSQL でこれを変更する必要があるのではないかと心配しています。

この関係 (および言語フィルタリング) を可能な限りシームレスにする最善の方法は何ですか?

4

4 に答える 4

2

私はカントが真の 1 対 1 であると仮定する必要があります。Cat Details テーブルに CatID と Lang ID の PK があるようです。それは、コレクションを置く理由を説明するでしょう。CatDetails テーブルの PK について言及していないので、間違っている可能性があります

編集: CatID と Lang ID の結合された Pk は 1:m の関係を作り、Linq to SQL は実際に正しいことをしています。真の 1:1 になる可能性がある唯一の方法は、cat テーブルにも lang ID があり、それが FK の一部である場合です。やりたいこと、またはそれをどのように実装したいかを再考する必要があるかもしれません。

于 2008-09-30T09:41:35.853 に答える
2

関連付けのプロパティを表示できます。(関連付けを表す線を右クリックし、プロパティを表示します。)プロパティは、それが 1 対 1 または 1 対多の関係であるかどうかを示します。これは、単一のエンティティの関連付け (1 対 1) またはエンティティ セットの関連付け (1 対多) を持つことによってコードに反映されます。

于 2008-09-30T09:45:15.907 に答える
0

1 対 1 の関係がないため、マッピングだけでは目的の機能が提供されません。ただし、ジョブを実行する自動生成された親クラスにメソッドを提供するのは簡単です。

public partial class Category 
{
  public IEnumerable<CategoryDetail> GetDetailsByLanguage(string langID)
  {
    return this.CategoryDetails.Where(c => c.LangID == langID);
  }
}
于 2008-09-30T09:59:23.063 に答える
0

LINQ to SQL はデータベース構造を直接モデル化していると思います。2 つのテーブルがあるため、2 つのオブジェクトが作成されます。

LINQ to Entities を見たことがありますか?これにより、データベース構造の上に別のレイヤーを作成して、より読みやすいクラスを作成できます。

于 2008-09-30T09:40:10.147 に答える