問題タブ [orm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
database - Linq がない場合の Linq のようなクエリ
現在取り組んでいるプロジェクトがありますが、現在は .net Framework 2.0 のみをサポートしています。私はlinqが大好きですが、フレームワークのバージョンが原因で使用できません。私が求めているのは、ORM の側面ではなく、Linq の「クエリ可能性」です。
これまでのところ最も近いのはllblgenですが、クエリを実行できるさらに軽量なものがあれば、さらに優れたものになります。
また、 NHibernateも調べました。これは、私がやりたいことに近づく可能性があるように見えますが、学習曲線がかなり急であり、マッピング ファイルに過度に興奮することはありません。
Linq と同様のクエリ インターフェイスを提供してくれるもの (または、Linq を .net 2.0 フレームワークで動作させる方法) を誰かが知っている場合は、ぜひ聞いてみたいと思います。
php - php用のClass::DBIのようなライブラリ?
私は古い無愛想なものを継承しましたPHP application
、そして私はそれをもう少し扱いやすいものにリファクタリングしたいと思いますが、徐々にです。perlのCPANには、Class :: DBIの周りに一連のクラスがあり、データベースの行をコード内のオブジェクトのベースとして使用でき、accessor methods
必要に応じてライブラリを生成するなど、メソッドを追加することもできます。
PHP用にこのようなものを知っている人はいますか?特に「フレームワーク」の大規模な採用を必要としないもの...PHP4でも機能する場合はボーナスポイントですが、正直なところ、それを捨てる別の理由が欲しいです。:-)
.net - .Net OR / Mを使用した構成可能なテーブルプレフィックス?
ウィキやフォーラム、ブログソフトウェアなどのWebアプリケーションでは、データをリレーショナルデータベースに保存すると便利なことがよくあります。多くのホスティング会社は、ホスティングプランを備えた単一のデータベースを提供しているため(追加のデータベースには追加料金がかかります)、データベースオブジェクト(テーブル、ビュー、制約、およびストアドプロシージャ)に共通のプレフィックスがある場合にユーザーにとって非常に便利です。データベースの不足を認識しているアプリケーションでは、ハードコードされたテーブルプレフィックスを使用するのが一般的です。しかし、もっと欲しいです。具体的には、ユーザーが指定できるテーブルプレフィックスが必要です。たとえば、web.configファイル(もちろん、適切なデフォルトを使用)に指定できます。
CRUD操作を手動でコーディングするのは嫌いなので、有能なOR / Mを使用して作業することを好み、LINQ to SQL、Subsonic、およびADO.Netを使用(および楽しんだ)しています。しかし、ユーザーのweb.configファイルにテーブルプレフィックスを配置することになると、新しいプロジェクトで多少の問題が発生します。このシナリオをエレガントに処理できる.NetベースのOR/M製品はありますか?
これまでに思いついた最善の方法は、外部マッピングファイルを使用してLINQ to SQLを使用することです。このファイルは、まだ架空のweb.config設定に基づいて何らかの方法で更新する必要があります。
誰かがより良い解決策を持っていますか?Entity Frameworkでそれを実現しようとしましたが、すぐに混乱しました。(EFに慣れていないためですか?おそらく。)SubSonicはどうですか?コード生成時以外にテーブルプレフィックスを適用するオプションはありますか?
c# - C# データベース アクセス: DBNull と null
ここで使用する独自の ORM があり、すべての db テーブルに厳密に型指定されたラッパーを提供します。弱く型付けされたアドホック SQL を実行することもできますが、これらのクエリはデータ リーダーから値を取得するために同じクラスを通過します。
そのクラスを Oracle と連携するように微調整する際に、興味深い質問に遭遇しました。DBNull.Value と null のどちらを使用する方がよいですか? DBNull.Value を使用するメリットはありますか? DB の世界から切り離されているため、null を使用する方が「正しい」ように思えますが、意味合いがあります (ToString()
たとえば、値が null の場合にやみくもにすることはできません)。についての決定。
linq - LINQ to SQL Mapping From Money to Double
I'm working with LINQ for the first time and wanted to get the Mapping to work when I have a money type in SQL, but my domain object property is of type double. How can I express this in the XML file, or in code so that the mapping does not throw the usual "invalid cast" exception?
database - DB層メンバーは静的かインスタンスか?
DB レイヤーのクラスに静的関数しかないプロジェクトや、メンバー関数にアクセスするためにそれらのクラスをインスタンス化する必要がある他のプロジェクトを見てきました。
どちらが「より良い」で、その理由は何ですか?
nhibernate - ADO.NET Entity Framework と NHibernate の比較
そのため、ADO.NET Entity Framework は (ブログ エントリや請願の形で) 少し悪い報道を受けていますが、私は急いで判断を下したくありません。実験の時間は限られていますが、より経験的なフィードバックを得て、まだ誰かがそれを使っているのだろうかと思っていましたか?
最後に、長い間使用されており、ADO.NET Entity Framework よりも成熟している可能性がある NHibernate を使用することについてどう思いますか。
sql - エンティティ オブジェクトが必要な理由
現在受け入れられているエンタープライズ アプリケーションの設計パラダイムのメリットについて、率直で思慮深い議論が必要です。
エンティティ オブジェクトが存在する必要があるとは確信していません。
エンティティ オブジェクトとは、"Person"、"Account"、"Order" など、アプリケーション用に構築する傾向がある典型的なものを意味します。
私の現在のデザイン哲学は次のとおりです。
- すべてのデータベース アクセスは、ストアド プロシージャを介して行う必要があります。
- データが必要なときはいつでもストアド プロシージャを呼び出し、SqlDataReader または DataTable の行を反復処理します。
(注: 私は Java EE を使用してエンタープライズ アプリケーションも構築しました。Java 関係者は、私の .NET の例を同等のものに置き換えてください)
私はアンチOOではありません。エンティティだけでなく、さまざまな目的のために多くのクラスを作成します。私が作成するクラスの大部分が静的ヘルパー クラスであることは認めます。
私はおもちゃを作っているわけではありません。私が話しているのは、複数のマシンに展開された大規模で大量のトランザクション アプリケーションです。Web アプリケーション、Windows サービス、Web サービス、B2B インタラクションなど。
OR マッパーを使用しました。いくつか書きました。私は Java EE スタック、CSLA、およびその他の同等のものをいくつか使用しました。私はそれらを使用するだけでなく、実稼働環境でこれらのアプリケーションを積極的に開発および保守してきました。
私は、実体オブジェクトが私たちの邪魔をしているという実戦テスト済みの結論に達しました.私たちの生活はそれらがなければずっと楽になるでしょう.
次の簡単な例を考えてみましょう。アプリケーション内の特定のページが正しく機能していないというサポートの電話を受けました。フィールドの 1 つが本来あるべきように永続化されていない可能性があります。私のモデルでは、問題を見つけるために割り当てられた開発者は、ちょうど 3 つのファイルを開きます。ASPX、ASPX.CS、およびストアド プロシージャを含む SQL ファイル。ストアド プロシージャ呼び出しのパラメーターが欠落している可能性があるこの問題は、解決するのに数分かかります。しかし、どのエンティティ モデルでも必ずデバッガーを起動し、コードのステップ実行を開始すると、Visual Studio で 15 ~ 20 個のファイルが開かれることになります。スタックの一番下に降りる頃には、どこから始めたか忘れてしまいます。私たちは一度に多くのことを頭の中に入れておくことができます。ソフトウェアは、不要なレイヤーを追加することなく、信じられないほど複雑です。
開発の複雑さとトラブルシューティングは、私の不満の 1 つの側面にすぎません。
次に、スケーラビリティについて話しましょう。
開発者は、データベースとやり取りするコードを作成または変更するたびに、データベースへの正確な影響を徹底的に分析する必要があることを認識していますか? 開発コピーだけでなく、本番環境の模倣を意味するため、オブジェクトに必要な列を追加すると、現在のクエリ プランが無効になり、1 秒で実行されていたレポートが 2 分かかることがわかります。選択リストに単一の列を追加したためですか?また、現在必要なインデックスが非常に大きいため、DBA がファイルの物理レイアウトを変更する必要があることがわかりましたか?
抽象化によって物理的なデータ ストアから離れすぎると、スケーリングが必要なアプリケーションに大混乱が生じます。
私は熱狂者ではありません。Linq から Sql、ADO.NET EF、Hibernate、Java EE などへの強力な推進力があるため、私が間違っているかどうかは確信できます。それが何であるか、そしてなぜ私が自分の考えを変える必要があるのか を本当に知りたい.
[編集]
この質問が突然再びアクティブになったようです。そのため、新しいコメント機能が追加されたので、いくつかの回答に直接コメントしました。返信ありがとうございます。これは健全な議論だと思います。
エンタープライズ アプリケーションについて話していることをもっと明確にするべきだったでしょう。たとえば、誰かのデスクトップで実行されているゲームやモバイル アプリについては、コメントできません。
いくつかの同様の回答に応えて、私がここで一番上に挙げなければならないことの1つは、直交性と関心の分離がエンティティ/ ORMに移行する理由としてしばしば引用されることです。私にとって、ストアド プロシージャは、私が考えることができる懸念の分離の最良の例です。ストアド プロシージャ以外のデータベースへのアクセスをすべて許可しない場合、ストアド プロシージャの入力と出力を維持している限り、データ モデル全体を理論的に再設計しても、コードを壊すことはありません。これらは、コントラクトによるプログラミングの完璧な例です (「select *」を避け、結果セットを文書化する限り)。
この業界に長く携わっていて、寿命の長いアプリケーションを扱ってきた人に尋ねてみてください。データベースが存続している間に、いくつのアプリケーションと UI レイヤーが行き来しましたか? データを取得するために SQL を生成する 4 つまたは 5 つの異なる永続レイヤーがある場合、データベースを調整してリファクタリングするのはどれほど難しいでしょうか? あなたは何も変えることはできません!ORM または SQL を生成するコードは、データベースをロックします。
python - Django の親モデルで auto_now DateTimeField を更新する
Message と Attachment の 2 つのモデルがあります。各添付ファイルは、Attachment モデルの ForeignKey を使用して特定のメッセージに添付されます。どちらのモデルにも、updated という auto_now DateTimeField があります。添付ファイルが保存されると、関連するメッセージの更新されたフィールドも現在に設定されるようにしようとしています。これが私のコードです:
これは機能しますか?もし私に説明できるなら、なぜですか? そうでない場合、どうすればこれを達成できますか?
language-agnostic - ORM への切り替え
ORM をサポートするアプリケーションに段階的に組み込むというアイデアをいじっています。アプリはあまり構造化されておらず、単体テストはありません。したがって、変更にはリスクが伴います。私は明らかに、変更するのに十分な理由があることを心配しています. データ アクセス用のボイラー プレート コードが少なくなり、生産性が向上するという考え方です。
このリングはあなたの経験に当てはまりますか?
それを段階的に導入することは可能ですか、それとも良い考えですか?
ORM の欠点は何ですか?