2

SqlMetal がアソシエーション名を台無しにするのはなぜですか。たとえば、「TextMessage」テーブルには、「ApplicationUser」テーブルを参照する 2 つの列があります。「SenderUserId」と「RecipientUserId」

SqlMetal を実行して「ApplicationUser」クラスを確認すると

「RecipientUserId」の場合、次が生成されます。

[Association(Name="FK__TextMessa__Recip__72910220", Storage="_TextMessages", ThisKey="Id", OtherKey="RecipientUserId", DeleteRule="NO ACTION")]
        public EntitySet<TextMessage> TextMessages
        {
            get
            {
                return this._TextMessages;
            }
            set
            {
                this._TextMessages.Assign(value);
            }
        }

「SenderUserId」の場合、このガベージ名前付きプロパティが生成されます。

[Association(Name="FK__TextMessa__Sende__73852659", Storage="__TextMessa__Sende__73852659s", ThisKey="Id", OtherKey="SenderUserId", DeleteRule="NO ACTION")]
        public EntitySet<TextMessage> _TextMessa__Sende__73852659s
        {
            get
            {
                return this.@__TextMessa__Sende__73852659s;
            }
            set
            {
                this.@__TextMessa__Sende__73852659s.Assign(value);
            }
        }

どうすればこれを解決できますか? これは使えません。Linq To Sql コードを生成するより良い方法はありますか?

4

2 に答える 2

3

外部キーに基づいて名前を生成しています。外部キーに、自動生成された名前よりも読みやすい名前を付けます。例えば:

制約 RecipientMessages FOREIGN KEY(RecipientUserId) は ApplicationUser(UserId) を参照します

于 2011-12-27T07:40:41.437 に答える
1

DBML ファイルを生成するように SqlMetal に指示できます。

SqlMetal /server:myserver /database:northwind /dbml:northwind.dbml /namespace:nwind

次に、DBML ファイル内の関連付け名を修正し、DBML から生成します。

SqlMetal /code:nwind.cs /map:nwind.map northwind.dbml

これを行う際の唯一の問題は、データベースを更新した後に DBML を再生成すると、DBML への変更が失われることです。

その他のオプション:

  • Visual Studio のデザイナーを使用します (スキーマが大きい場合はあまり役に立ちません)。
  • DataContext を生成するためのサードパーティ ツールを検索する
  • 独自のツールを作成する

もう 1 つのポイント: SqlMetal がこれほど悪い関連付け名を出力するのはめったに見たことがありません。列の名前はどのようになっていますか? 別の関係名と競合していませんか?

于 2009-05-05T08:56:32.830 に答える