6

次の問題の解決策を探しています。

私は、いくつかの/なしの列で互いに区別される多くのテーブルを持っています(なぜこれが起こるのかは、私がデータベースを設計しておらず、変更することもできないため、当てはまりません)。

例: Table User: Columns{name,surname,age} Table OldUser: Columns(name,surname,age,lastDateSeen} など

Visual Studio の EntityFramework 4.0 に、_name、_surname、_age フィールドとそれに対応するプロパティで構成される基本クラスを拡張して、そのクラスをコード内のバッチ ジョブに使用できるようにする方法はありますか?

私の現在の解決策は、このクラスを作成し、コンバーターを使用して永続オブジェクトからの値をそのオブジェクトに渡すことです。機能しますが、エレガントではなく、好きではありません。

私は、これが基本的な機能である Java/Hibernate 環境から来ました。

(将来の参考のために、クラスにインターフェースを実装させたい場合、同じことができますか?)

前もって感謝します。

4

1 に答える 1

1

RDBMS (少なくとも SQL Server 2008 以前) ではテーブルの継承が許可されていないため、C# の DB モデルでは継承を使用しないことをお勧めします。これは、テーブルのデザインを制御できない場合に特にお勧めします。

抽象化の恩恵を受けるクラスのクライアントが実際にある場合は、代わりにインターフェイスを使用しますが、DB の設計を制御できないと、DB デザイナーがテーブルを変更して EF クラスを実装しなくなる可能性があるため、これの価値が低くなります。インターフェース:

public interface IUser {
  public string Name { get; }
  // etc...
}

public class User : IUser {
  public string Name { get; set; }
  // etc...
}

public class OldUser : IUser {
  public string Name { get; set; }
  // rest of IUser
  public DateTime? LastSeenOn { get; set; }
}
于 2012-12-28T02:12:59.887 に答える