1

ほとんどの場合、クラスは事前にわかっています(例:顧客、注文)。それらは、ビジュアルデザイナー、コード内の属性、または構成ファイルを使用して、ORM(Entity Framework、LINQ to SQL、NHibernate、BLToolkitなど)用に記述されています。たとえば、Customerクラスのオブジェクトを使用する必要がある場合は、次のような強い型のクエリを記述できます。

db.Customers
  .Where(c => c.FirstName == "John")
  .Select(c => new { c.Id, c.LastName })
  .GroupBy(c => c.Id)

ただし、私のアプリケーションでは、入力データは実行時にユーザーが定義するモデルに処理されます。ユーザーはプロパティを追加および削除できるため、コードでモデルを定義できません。これには文字列SQLクエリを手動で生成する必要があるという考えは私を怖がらせます。次のようなコードを記述できるようにしたいと思います。

db.Tables["Customers"]
  .Where("c.FirstName = :FirstName")
  .Select(new[] { "c.Id", "c.LastName" })
  .GroupBy("c.Id")
  .Param(":FirstName", "John")

(構文を発明した例です。)

質問:最初にコードでモデルを定義せずに複雑なSQLクエリを構築するのに役立つ.NET用のライブラリはありますか?

PS .NET用ではなく、このようなライブラリが存在するように見えます。SQLAlchemy、Ruby on Rails ActiveRecord、PHP Yii ActiveRecord、Djangoモデルなどが見たいです。

4

3 に答える 3

1

Rob Conery の Massive役に立つかもしれません。これは軽量で動的な DAL であり、探しているアドホック機能を備えながら、DAL のいくつかの利点を提供します。

動的であるため、コンパイル時のチェックや、兄弟の他の利点のいくつかは得られませんが、完全な DAL と生の SQL の間のスペースにまたがる非常に便利な小さなツールです。

于 2012-11-25T16:17:23.800 に答える
0

問題の解決策: Simple.Data by Mark Rendle 。クラスやプロパティを定義せずに、次のようなコードを書くことができます。

Database.Open().Users.FindAllByEmail(email).FirstOrDefault()

( Rob Conery の大規模なライブラリの説明で言及されていました。)

于 2012-12-12T12:00:52.267 に答える
0

あなたは今、とても苦しんでいます。これは一般的にアンチパターンと見なされています。実際には必要ですが、必要になる場合もあります (これらのアプリの 1 つだけを持っている場合もあります)。悪いニュースは、ORM などからのサポートがないことです。

ほとんどの ORM はデータベースからモデルを生成できますが、それは「開発時」の操作であるため、たとえばデータ モデルが完全に未完成の場合は、賢明に使用することはできません。それは言った-そのようなアプリケーションがどのように機能するかはわかりません。

私はこれに対するアプリケーションを認識していません。基本的に 2 つの極端な例があります。文字列としての SQL です。これは一般に、手がかりのある人からは悪いと見なされます。また、強い型付けされたオブジェクトです。あなたのアプリは要件からちょうど中間にあり、それはサポートされていないと思います。

あなたが直面している問題の 1 つは、LINQ が - コンパイル時にチェックされる操作であるということです。「エンティティ」オブジェクトを動的な基本クラスとして使用し、そこから取得することで機能する可能性があります(コンパイラは動的オブジェクトについて何も文句を言わないため)。理論的には、これにより、コンパイル時のチェックなしで LINQ のオブジェクト クエリ統合を構築できますが、「一般的な使用シナリオ」がないため、IIRC にはそのようなものは存在しません。たとえば、コンパイル時のチェックなしで窒息します。

于 2012-11-25T15:58:03.673 に答える