2009-02-24 20 views
6

私はデータベースとO/R-Mapperによって作成されたエンティティセットを持っていますが、これをLINQですべて使用しています。実行時にLINQ O/R-Mのテーブル名/ソースを変更する方法は?

O/R-Mapperでは、すべてのテーブルのテーブル名(ソース)を入力する必要があります。これはLINQによって生成されたSQLに使用されています。 .dbmlファイルでは、次のようになります。

<Table Name="dbo.Customers" Member="Customers"> 

は、今私はSQLは、(例えば、代わりに顧客のcustomers2008)を他のいくつかのテーブルに対して実行されますので、実行時にこのテーブル名を変更したいと思います。

実行時にテーブル名(ソース名)を変更する方法はありますか?

[更新]私は、XmlMappingSourceがデータベースに永続化されていない計算されたプロパティをレンダリングできないことを発見しなければなりませんでした(はい、SqlMetalによって作成されたマッピングでも永続化されないものはすべて無視されます)。あなたはこのような何かをする必要があると思います...の

答えて

7

種類:

  1. はデザイナーでエンティティを作成します。
  2. SqlMetalを使用して、デザイナが生成する.dbmlファイルからxmlマッピングファイルを生成します。
  3. xmlファイルのテーブル名を更新します。
  4. 次に、コードで、xmlマッピングファイルで作成されたXmlMappingSourceを受け入れるDataContextコンストラクタオーバーロードを使用します。

ここでステップすることにより、このプロセスステップを説明するブログ記事です: http://weblogs.asp.net/guybarrette/archive/2008/07/23/linq-to-sql-dynamic-mapping.aspx

私は(私が知っているxxxは、インストールIDでttccom001xxxのようなテーブル名を持つERPデータベースと同様のプロセスを使用していますそれは恐ろしいスキーマですが、私はそれについて何もできません)。複数のインストールがあるので、インストールごとに最初のxmlマッピングを1回コピーし、xxxをインストールIDに置き換えます。私はRegexを使って交換用の小さなコンソールアプリケーションを作成し、それを私のビルドプロセスの一部として追加しました。

+0

私は実行時にこのマッピングファイルを作成する方法が必要なので、マッピングファイルをデータクラスと一直線に並べる必要はありません。 – Sam

+0

まあ、私はこれらのファイルを作成することができましたが、残念ながら期待通りに動作しません。今は時間を無駄にしています。 – Sam

+0

実行時ではなくポストビルドイベントでXMLマッピングを作成することをお勧めします。 – jrummell

3

ここにMicrosoftのExternal Mapping Referenceへのリンクがあります。

外部マッピングは、属性ベースのマッピングをオーバーライドします。

ここが重要です。

  1. マッピングを表すxmlをいくつか作成します。
  2. 新しい投稿はXmlMappingSourceです。あなたのxmlを入力してください。
  3. DataContextを構築するときは、XmlMappingSourceを受け入れるコンストラクタを使用します(this oneなど)。
+0

実行中のプログラムでマッピングファイルを作成する方法については、リンクやソースがありませんか? – Sam

関連する問題