7

性別、住所タイプ、連絡先タイプなどのあらゆる種類の制御値ルックアップデータを含む参照テーブルがあります。多くのテーブルには、この参照テーブルへの複数の外部キーがあります。

また、同じテーブルへの2つの外部キーを持つ多対多の関連付けテーブルもあります。残念ながら、これらのテーブルがLinqモデルにプルされ、DBMLが生成されると、SQLMetalは外部キー列の名前や制約の名前を調べず、ターゲットテーブルのみを調べます。そのため、Reference1、Reference2、...というメンバーになってしまいます。メンテナンスはあまり簡単ではありません。例:

  <Association Name="tb_reference_tb_account" Member="tb_reference" <======
  ThisKey="shipping_preference_type_id" OtherKey="id" Type="tb_reference"
  IsForeignKey="true" />
  <Association Name="tb_reference_tb_account1" Member="tb_reference1" <======
  ThisKey="status_type_id" OtherKey="id" Type="tb_reference" 
  IsForeignKey="true" />

もちろん、DBMLにアクセスしてメンバー名を手動で変更することはできますが、これは、データベーススキーマをラウンドトリップできなくなったことを意味します。これは、まだ進化しているモデルの現段階ではオプションではありません。参照テーブルをn個の個別のテーブルに分割することも望ましくありません。

おそらく、世代ごとにXMLに対して実行され、メンバー名をThisKeyから派生したものに置き換えるスクリプトを作成できます(これらのタイプのキーの命名規則に準拠しているため)。誰かがこの問題のより良い解決策を見つけましたか?

4

4 に答える 4

3

それで、私は部分的なクラスのルートを下りました。たとえば、元の例の最初の参照メンバーに対応するために、次のメンバーを追加しました。

public partial class tb_account
{
    public tb_reference shipping_preference_reference
    {
        get
        {
            return this._tb_reference.Entity;
        }
        set
        {
            this.tb_reference = value;
        }
    }

これは完璧にはほど遠いです。大規模なモデルではかなりの量の追加コードが必要であり、属性の順序が変更されないかどうかによって異なります(参照テーブルへの別の外部キーがアカウントテーブルに追加された場合、このメンバーは実際には配送設定)。利点もあります。私はすでに他の目的のために部分的なクラスを書いているので、これらのメンバーを追加するためにアプリケーションを再設計する必要はありませんでした。

于 2009-09-21T14:00:04.927 に答える
3

VS2010では、ビュー内の親と子のプロパティの名前を実際に変更できます。しかし、それは少し隠されています。

  1. dbmlビューアで、気になる関係を選択します。
  2. プロパティグリッドには、子プロパティと親プロパティの2つの行があります。
  3. そこで展開すると、プロパティの名前を変更できます

詳細については、こちらをご覧ください: http ://weblogs.asp.net/scottgu/archive/2007/05/29/linq-to-sql-part-2-defining-our-data-model-classes.aspx

それは私がそれを手に入れたところです。

于 2010-08-18T12:03:46.157 に答える
2

LINQの現在のmsツールはある程度制限されており、2010年と比べてそれほど多くの努力が必要とは思われません。独自のコードジェネレーターを作成し、 Damienのt4テンプレートまたはPLINQOを確認できます。また、一見の価値があるかもしれないEDMDesignerを見つけました。

于 2009-09-20T16:21:35.277 に答える
0

sqlmetalからの私のxmlには、はるかに賢明なデフォルトがありました。完璧ではありませんが、より良いです。最初のFKはテーブル名を取得しましたが、2番目のFKはフィールド名を取得しました。

  <Association Name="FK_Product_DefaultOutputTypeID" Member="OutputType"
   ThisKey="DefaultOutputTypeID" OtherKey="OutputTypeID" Type="OutputType"
   IsForeignKey="true" />
  <Association Name="FK_Product_DefaultTileOutputTypeID" Member="DefaultTileOutputType"
   ThisKey="DefaultTileOutputTypeID" OtherKey="OutputTypeID" Type="OutputType"
   IsForeignKey="true" />

sqlmetalバージョン:

  C:\Program Files\Microsoft Visual Studio 9.0\VC>sqlmetal /?
  Microsoft (R) Database Mapping Generator 2008 version 1.00.21022
  for Microsoft (R) .NET Framework version 3.5
  Copyright (C) Microsoft Corporation. All rights reserved.
  ...
于 2010-06-02T12:49:25.830 に答える