2008-08-28 3 views
33

私はLinqをSQLに使用し始めました.dbmlファイルの管理のために共有できるベストプラクティスを誰かが持っているのだろうかと思います。LinqからSQL Dbmlファイルを管理するためのベストプラクティス?

  • どのようにデータベースを最新の状態に保ちますか?
  • データベース全体に対して1つのdbmlファイルがありますか、複数の論理ユニットに分割されていますか?
  • このファイルの管理はチーム環境でどのように機能しますか?

その他のヒントをお待ちしております。

+0

DupesをLINQについての良い情報を提供するリンクです。com/questions/3468722/update-dbml-file、http://stackoverflow.com/questions/1716556/asp-net-mvc-best-practices-for-dbml-files –

答えて

19

あなたはSqlMetalを見ましたか?それはあまりにも推進されていませんが、正式にサポートされています。 dbmlをコマンドラインからビルドするために使用することができます。dbの継続的な統合更新の一部として使用しています(ただし、これを行うとコードの分離が良好です。部分クラスは救世主です。上書きされます)。

私が正しく思い出したのは、Visual Studioのモデルデザイナーと全く同じ機能を持っていません(私は多元対応が異なると思います)。そこにはgood post about it on Ben Hall's blogがあります。

9

L2Sデザイナーがデータベース構造との同期をサポートしていないという事実は、私の心には大きな制限があります。ただし、アドオンで利用可能ないくつかの再同期機能を提供している:

http://www.huagati.com/dbmltools/

残念ながら、それはもはや自由ません。

6

PLINQOは、LINQ to SQLを生成する一連のコード生成テンプレートです。 LINQ to SQLを使いやすくする他の多くの機能とともに、データベースとの同期やエンティティの複数クラスへの分割をサポートしています。

PLINQOのサイトhttp://www.plinqo.comとイントロ動画をご覧ください。

7

DBMLファイルがデータベースから更新されたとき、あなたが... DBMLを管理するための他のヒントやトリックのために

を尋ねたので、そのようなデフォルトの列の値として、彼らは上でピックアップしていない特定のスキーマの設定があり、 、手動で設定を変更する必要があります。これは、DBMLをリフレッシュするたびに時間を浪費することにつながり、手動で調整する必要がある場所を認識したり覚えたりせずにコードが失敗し始めることがあります。

これを防ぐには、リフレクションを使用してLINQメタデータでこれらの(手動)設定をチェックする単体テストを作成する方法があります。テストが失敗した場合は、説明的なエラーメッセージが表示され、ユーザーに列のプロパティを適切に変更するよう指示されます。これは完璧な解決策ではなく、多くの手動設定がある場合は便利ではないかもしれませんが、自分とチームの大きな苦痛を避けるのに役立ちます。

ここでは、データベースから列が自動生成されるように設定されていることを確認するためのnunitテストの例を示します。ます。http:// stackoverflowのここ

[Test] 
    public void TestMetaData() 
    { 
     MyObj my_obj = new MyObj() 
     { 
      Foo = "bar", 
     }; 

     Type type = MyObj.GetType(); 
     PropertyInfo prop = type.GetProperty("UpdatedOn"); 
     IEnumerable<ColumnAttribute> info = (IEnumerable<ColumnAttribute>)prop.GetCustomAttributes(typeof(ColumnAttribute), true); 
     Assert.IsTrue(
      info.Any<ColumnAttribute>(x => x.IsDbGenerated == true), 
      "The DBML file needs to have MyObj.UpdatedOn AutoGenerated == true set. This must be done manually if the DBML for this table gets refreshed from the database." 
     ); 
    } 
関連する問題