4

私の質問は、ここの上級ユーザーにとっては少し異なるか基本的なものかもしれません。

管理者がカスタマイズできるWebアプリケーションがあります。つまり、管理者は新しいテーブルスキーマを追加したり、テーブル列を編集したり、新しいテーブル列を追加したりできます。これらの変更は、変更後に公開される論理オブジェクト(EDMXによく似ています)にマップされます。公開中に、必要な変更を加えたストアドプロシージャを生成します。

UIから、これらの論理オブジェクトを使用してDBに接続します(マッピングを理解し、適切なsprocやビューなどを実行するCOMを使用します)。今、私は現在持っている論理オブジェクトモデルを置き換えるためにEFを使用することを考えています。EDMXファイル(csdl、msl、ssdl、csファイル)を動的に作成できますが、それらをコンパイルしてクラスをDLLに動的にパッケージ化する方法がわかりません。つまり、ボタンをクリックすると、すべてのedmx関連ファイルが作成され、CSファイルに基づいてDLLが作成され、Webサイトがコードの新しい変更にアクセスできる必要があります。

csファイルを自動的かつ動的にコンパイルする方法を教えてください。他のファイル(default.aspxなど)のソースコードはお客様側にはありません。

ありがとうアルバート

4

2 に答える 2

2

Bepenfriends-シェルからCSCを試行するのではなく、CSharpCodeProvider.CompileAssemblyFromFileの使用を検討してください。

注意すべき点の1つは、コードをコンパイルしてから再度コンパイルしようとすると、作成されたアセンブリがロックされる可能性があるということです。このために、新しいAppDomainを作成し、そこでコンパイルしてから、AppDomainをアンロードするAsyncCompilerを作成しました。

これはかなり厄介なコードですが、私はこれを実行しており(AEF XMLファイルを生成し、それらからコードを生成してから、すべてをアセンブリにコンパイルします)、うまく機能します。私が正しく持っていない唯一のことは、ストアドプロシージャを動的にインポートすることです。私のSSDLにはそれらがありますが、CSDLやMSLにはありません。解決策を探すことで私はここにたどり着きました。

ここでのキーワードがあなたを正しい方向に向かわせるのに十分であることを願っています。

于 2010-02-24T08:14:33.477 に答える
0

私はまだあなたに決定的な答えを持っていません-しかし、おそらく近い将来、あなたが調べることができる2つの潜在的な解決策:

1)データベースからLinq-to-SQLモデル(DBMX)とそれに関連する*.csファイルを生成するPLINQOと呼ばれる一連のCodeSmithテンプレートがあります。私は彼らにEntityFrameworkのサポートについて自分で尋ねたところ、彼らはそれに取り組んでいることを確認しました。

これらはコードおよびモデル生成テンプレートであるため、Linq-to-SQL用にそれらを使用して、EDMX用に微調整することもできます。少し作業が必要ですが、間違いなく可能です。*.csファイルと*.edmxモデルを取得したら、.NETがインストールされているすべてのマシンにインストールされているCSC(C#)コマンドラインコンパイラを使用して、そのモデルから結果のアセンブリを生成できます。

2).NET 4では、新しいEntity Framework 4にT4テンプレート(別のコード生成テクノロジ)が含まれ、コード生成をカスタマイズできます。ここでも同じ話が当てはまります。EDMXモデルとそれに関連するクラスの*.csファイルを外部で生成し、それらのテンプレートからその場でアセンブリを生成できます。

そのトピックに関する別のブログ投稿を参照してください。グーリング(またはビンビン)または「EF4T4テンプレート」の場合に多くの情報が見つかるはずです。

それが少なくとも少し役立つことを願っています!

于 2010-01-31T21:28:51.020 に答える