2

異なるプライマリID名を持つデータベースの最初のエンティティがあります... EmployeeID、CustomerIDなど。汎用リポジトリとUoWを構築しようとしていますが、データベースを変更せずに、UoWにすべてのプライマリIDを伝えるために、とにかく存在するかどうかを知りたいですデータベースでは、つまりemployeeidなどは単にidと呼ばれますか?

ありがとう

私の質問は明確ではなかったと思うので、私が何をする必要があるかの例を試してみます。お待ち頂きまして、ありがとうございます。

customer、orders、および orderdetails の 3 つのテーブルがあります。customer テーブルには主キー フィールド CustomerID があります。orders テーブルには主キー フィールド OrderID があります。 orderdetails テーブルには主キー フィールド orderdetailsid があります。

各テーブルを表す edmx から生成された 3 つのエンティティがあります。

変更の保存を監視するための汎用リポジトリと作業単位があります。customerid 主キーは id として知られ、orderid 主キーも id として知られ、最後に orderdetailsid はまた id として知られているという一般的な言い方をしたいと思います。

ジェネリックを使用すると、主キーを返すインターフェイスを作成できると思います。

 public interface IEntity {
    int Id { get; }
 }

デザイナですべてのエンティティを調べて、データベースに影響を与えずに主キーの名前を変更できると思いますが、アプリケーション内でこれを行う方法がある場合は、実際には時間がかかります。

ありがとう

4

1 に答える 1

0

私の経験では、このタイプのマッピングを実現する唯一の方法は、モデル ビルダーを使用して流暢な構成を使用して列名を設定するか、モデルで Data Annotations API を使用して列名を設定することです。

つまり、データ注釈

[Column("EmployeeId")]
public int ID { get; set; }

またはコンテキストクラスで流暢

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

     modelBuilder.Entity<Person>().Property(e=>e.Id).HasColumnName("EmployeeId");

     base.OnModelCreating(modelBuilder);
}

ただし、これには、edmx を使用したり、継承された DbContext を記述してカスタマイズしたりする必要はありません。エンティティ フレームワークのパワー ツールを調べて、デザイナーへの依存を取り除きながら、エンティティ クラスをすばやく生成する能力を維持することもできます。エンティティのマッピングに関する限りカスタマイズ可能

後者の場合の別のオプションとして、マッピングをカスタマイズする DbConvention を作成することもできます。この記事では、エンティティ フレームワークのカスタム データベース規則を作成する例をいくつか示しますhttp://msdn.microsoft.com/en-us/data/jj819164.aspx

于 2013-04-07T05:38:44.183 に答える