3

私は LINQ to SQL の実験を始めました。基本的に、LINQ マッピング デコレータを使用してクラスを作成しています。これにより、db テーブル スキーマのどの部分をクラスに組み込むかを選択します。

簡単な例:

private DateTime? _LocalCopyTimestamp = (DateTime)SqlDateTime.MinValue;
[Column(Name = "recaLocalCopyTimestamp", Storage = "_LocalCopyTimestamp", CanBeNull = true)]
public DateTime? LocalCopyTimestamp
{
    get
    {
        return this._LocalCopyTimestamp;
    }
    set
    {
        this._LocalCopyTimestamp = value;
    }
}

プロジェクトの制約により、モデリング ツールを使用しておらず、頼るつもりもありません (スキーマの変更が処理される方法と、既存のデータベース スキーマがあり、それが少し有機的で厳密ではないため)。

スキーマ情報ファイルや多数の個別のコード ファイルを含めることなく、Entity Framework でこの柔軟性を実現する方法はありますか?

次に、基になる複数のテーブルを「使用する」クラスも作成できますか?

誰でもこれに関するドキュメントを教えてもらえますか?

4

2 に答える 2

8

あなたが要求している機能 (C# クラスを記述し、それらからモデルを生成する) は、Entity Framework チームによって「 Model First」と呼ばれています。Entity Framework の現在の出荷バージョンには存在しませんが、次のバージョンで計画されている機能です。PDC の Entity Framework トークを見ると、この新機能のデモンストレーションを見ることができます。現在のバージョンでは、「多くの」マッピング ファイルを記述する必要はありませんが、1 つ (EDMX ファイル) が必要であり、XML である必要があります。

はい、複数の基になるテーブルを使用するエンティティ クラスを作成できます。これを「エンティティ分割」と呼びます。リンクの段階的な手順。一般に、Entity Framework は LINQ to SQL よりも多くの複雑なマッピング シナリオをサポートしていることがわかります。

デザイナーを使わずに EDMX を書くことに関して、私は Marc に完全に反対しなければならないことを残念に思います。デザイナーを使用せずに EDMX を記述することは可能であるだけでなく、特定の側面を超えるプロジェクトの場合、それは避けられません。これに関するいくつかのポイント:

  1. Entity Frameworkの初期の歴史 (RTM 以前、「ObjectSpaces」) のほとんどでは、XML ファイルを手動で記述することがツールを使用する唯一の方法でした。デザイナーは最近の機能であり、Entity Framework 自体よりもかなり不安定です。
  2. 複合型など、デザイナーでまったくサポートされていない特定の Entity Framework 機能があります。
  3. 個々の列をマッピングしない、外部キー関係のないテーブルをマッピングするなどの特定のマッピング シナリオは、レガシ データベースで必要になる場合がありますが、デザイナーではサポートされていません。
  4. (1) で述べたように、デザイナーは Entity Framework 自体よりもかなりバグが多いです。そのため、大規模なプロジェクトでは、デザイナーのミスの後にクリーンアップする必要が生じる可能性があります。
于 2009-03-10T11:56:39.840 に答える
1

Entity Framework は EDM を使用してデータをモデル化します。これは 3 つの複雑なスキーマ ファイル (ストレージ、概念、マッピング) のセットであり、最も一般的にはプロジェクト内のリソースとして保存されます (単一の EDMX ファイルを使用して 3 つのスキーマ ファイルすべてを生成するデザイナーを介して)。

この情報の属性付きクラスはサポートされていません。EDM を作成する唯一の賢明な方法は、デザイナー (基本的に、嫌いなモデリング ツール) を使用することです。

基になる複数のテーブルを「使用」するように再分類します。はい、概念層 (つまり、クラス) の単一の Entity Framework エンティティは、複数のストレージ テーブルにまたがることができます。これは、一部の継承の例で特に役立ちますが、(IIRC) フラット モデルでも使用できます。これは、ストレージ層と概念層の間の "マッピング" を介して行います (最も一般的には、デザイナーのタブにあります)。

于 2009-03-10T05:26:47.563 に答える