.NETでのSQLiteのLINQ to SQLコード生成(C#)

私はめったにC#を記述せず、基本的にすべてのアプリケーションとサービスはMSSQLサーバーまたはデータベースサービスを使用してデータソースに接続します。 次に、サーバーではなくローカルデータベースを使用してアプリケーションを作成します。 少しグーグル、突然SQLiteを選んだ。



まえがき



すべてのお客様にコード要件がありました:



上記に基づいて、リレーショナルオブジェクトに関連するLINQ to SQLクラスはもちろんデータベースに使用されました。



当然、デスクトップアプリケーションでは、すぐにSQLiteプロバイダーをダウンロードしてインストールし、データベース、すべてのタブレット、リンクを作成し、LINQ to SQLクラスを作成し、すべてのオブジェクトをブラウザーからそこにドラッグしました。





到着しました








どうする どこで実行しますか?



もちろん、グーグル、そこからスムーズにstackoverflowに遭遇します! 9000を超えるオプションがあります。



いいえ、いいえ、そして再びいいえ。 データクラスは、データベースへの接続、レコードの取得、挿入、更新、削除(DataContext)を担当するデータを処理する必要があり、開発者はリレーショナルオブジェクトとそのプロパティと同じ名前のオブジェクトを使用する必要があります!



解決策



テーブルの「左」コードジェネレーターを探す以外に、やることはありませんでした。 少しグーグルで、すべての長所と短所を比較検討して、 dblinq2007に決めました



後で判明したように、データベーススキーマと接続を使用して、ソースファイルだけでなく、スタジオLINQ to SQLファイルも生成できます。 これがまさに必要なものであり、私は開発を始めました。 最初の例外:dblinq2007が記述され、Framework 2.0のスキームを生成します。4.0を使用します。 ソースをダウンロードし、スタジオで開き、プロジェクトプロパティで、フレームワークの4番目のバージョンを選択し、dblinq2007を再構築します。



コード生成



生成するには、コンパイル済みのバイナリディレクトリにあり、DbMetal.exeと呼ばれるdblinq2007実行可能ファイルを使用する必要があります。 ドックを少し吸ってみましょう。ヘルプを見ると、プロバイダー、接続文字列、ファイル名を指定するだけで十分であり、DbMetalがSQLite用のDBMLファイルを生成します。







DBMLモデルを生成します。







DBMLを生成した後、CSファイル(DBMLファイルと同じ名前を付ける必要があります)を生成する必要があります。CSファイルは、すべての接続でデータベースの構造を記述します。 メイン生成クラスMainは 、SQLiteでの作業を実装するDataContextクラスから継承されます。







すべてのファイルが生成されたので、それらをプロジェクトのディレクトリにコピーし、DBMLファイルをプロジェクトに追加します。 スタジオがSQLiteで動作していることを確認するには、サーバーブラウザーですべてのプレートを選択し、DBMLコンストラクターにドラッグします。







勝利!







原則として、それだけです。 操作が完了すると、LINQクエリをデータベースに書き込むことができ、すべての接続を持つオブジェクトが返されます。



public class Test { private void Example() { //         SQLiteConnection Connection = new SQLiteConnection(Properties.Settings.Default.connectionString); Connection.Open(); //  DatabaseContext,       Main dbContext = new Main(Connection, new SqliteVendor()); //  List<Order> OrderList = (from o in dbContext.Order select o).ToList(); //  List<Order> OrderList = dbContext.Order.Take(10).ToList(); //      string OrderStatus = OrderList[0].OrderStatus.Name; //    List<OrderUnit> OrderUnits = OrderList[0].OrderUnit.ToList(); //   List<MenuImages> UnitImages = OrderList[0].OrderUnit[0].Menu.MenuImages.ToList(); //  Order ord = new Order() { OrderNumber = 1, ToTime = DateTime.Now }; dbContext.Order.InsertOnSubmit(ord); dbContext.SubmitChanges(); //  dbContext.Order.DeleteOnSubmit(OrderList[0]); dbContext.SubmitChanges(); //  Connection.Close(); } }
      
      






All Articles