6

私はすべてのサイトが持っている古いデータベースを持っています。これは、特定のコンテンツを多数のカテゴリ/サブカテゴリ/子アイテム形式で記述しています。これまで、コンテンツの追加/編集は、テーブルでの手動作業か、生の SQL Windows フォーム ツール (仕事を始めたときに作成しました!) のいずれかでした。

WPF 4.5 および .net 4.5 での Entity Framework スタイルのドラッグ アンド ドロップ、バインド、および実行コーディング機能が必要です。

EF5 は非常に簡単に使用できるため、NHibernate を使用することをためらっています。Nhibernate の方が作業が多いことは理解しています (より高速な ORM ではありますが)。うまく機能する代替手段はありますか?可能であれば、手動でのセットアップが多すぎるのを避けようとしています。エディターは必須のプロジェクトではなく、追加の作業をたくさん行うことは正当化できませんが、優れたバージョンがまとめられれば、今後 2 年間の仕事が楽になるでしょう。

私が本当によく知っているアクセスに対するすべての議論:)-これを交換することは、少なくとも1年間はオプションではありません。

StackOverflow サイトを検索したところ、これを求める質問はあまり多くありませんが、良い質問を見逃していたら申し訳ありません!

更新: Access データベースのすべてのクラスを手動でビルドする必要がないように、どのコード生成で取得するために必要なものとして、質問を少し洗練する必要があると思います。私が見る限り、Dapper の仕事は効率性に関するものですが、コードの生成とは異なります。エンティティ フレームワークの考え方から来て、私の思考のどこでタスクを結合したかがわかります :)。したがって、自分でボイルすることは別として、Accessで使用するための優れたコード生成を知っている人はいますか? これで Dapper と結婚できます :)。

4

4 に答える 4

6

Access データベースでは動作しないため、Entity Framework は使用できません。

NHibernate を MS Access で使用することは可能ですが、NH はそのままでは Access をサポートしていません。NHContribNHibernate.JetDriver
必要です。NH構成ファイルの設定例を次に示します。

私の記憶が正しければ、NH Contrib は使用している正確な NH バージョンに対してコンパイルする必要があるため、おそらくソース コードをダウンロードして自分でコンパイルする必要があります。

別の方法として、スタック オーバーフロー独自のDapperなど、多くのマイクロ ORM のいずれかを使用できます。

Dapper は DB に依存しないため、Access を含むあらゆるものに接続できます。公式サイトより引用:

dapper は私の db プロバイダーで動作しますか?
Dapper には DB 固有の実装の詳細はありません。sqlite、sqlce、firebird、oracle、MySQL、SQL Server を含むすべての .net ado プロバイダーで動作します。

欠点は、Dapper は DB に依存しないため、pagingなどの高度な機能を自分で実装する必要があることです。


編集:

IMO Dapper、「かなり簡単にすばやく実行できる」カテゴリに属しています。
これを見てください:
(完全なデモプロジェクトはこちら)

using System;
using System.Data.OleDb;
using Dapper;

namespace DapperExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb"))
            {
                var list = con.Query<Product>("select * from products");

                Console.WriteLine("map to a strongly typed list:");
                foreach (var item in list)
                {
                    Console.WriteLine(item.ProductNumber + " : " + item.Description);
                }

                Console.WriteLine();

                var list2 = con.Query("select * from products");

                Console.WriteLine("map to a list of dynamic objects:");
                foreach (var item in list2)
                {
                    Console.WriteLine(item.ProductNumber + " : " + item.Description);
                }

                Console.ReadLine();
            }
        }
    }

    public class Product
    {
        public string ProductNumber { get; set; }
        public string Description { get; set; }
    }
}

このコード例には 2 つの異なるクエリがあります。

最初のものは、強く型付けされたリストにマップされます。たとえば、結果はIEnumerable<Product>です。もちろん、Productマップできるクラスが必要です。

2 番目のクエリはIEnumerable<Dynamic>(>= .NET 4.0) を返します。これは、プロパティがオンザフライで評価され、事前にクラスを定義する必要がないことを意味しますが、タイプ セーフ (および IntelliSense) が失われるという欠点があります。
私の個人的な意見では、型の安全性の欠如は私にとって大きな問題です (私は最初のクエリ構文を好みます)。

于 2013-01-03T14:21:44.857 に答える