2009-05-05 6 views
2

なぜSqlMetalがアソシエーション名を混乱させるのですか?例えば、私の 'TextMessage'テーブルでは、私は 'ApplicationUser'テーブルを参照する2つの列があります。 'SenderUserId' と 'RecipientUserId'SqlMetalがガベージアソシエーション名を生成しています

私はSqlMetalを実行すると 'RecipientUserId' の私の 'ApplicationUser' クラスで

を見ると、それが生成します。

[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 [email protected]__TextMessa__Sende__73852659s; 
      } 
      set 
      { 
       [email protected]__TextMessa__Sende__73852659s.Assign(value); 
      } 
     } 

これをどのように修正できますか?これは使用できません。 SQLコードにLinqを生成する良い方法はありますか?

答えて

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のデザイナー(偉大ではない、あなたのスキーマが大きい場合)
  • のdatacontexts
  • は独自のツール
を書く生成するために、サードパーティ製のツールを検索します

もう一つのポイント:私はSqlMetalが悪いアソシエーション名を出すのをめったに見ていません。列の名前はどうですか?別の関係名と競合していますか?

2

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

制約受信者メッセージFOREIGN KEY(RecipientUserId)参照ApplicationUser(ユーザーID)

関連する問題