単一テーブルの継承で汎用サポートを使用し、基本クラスの FindAll を引き続き使用することは可能ですか?
おまけの質問として、ActiveRecordLinqBase<> も使用できますか? 私はそれらのクエリが大好きです。
詳細: 次のクラスが定義されているとします。
public interface ICompany
{
int ID { get; set; }
string Name { get; set; }
}
[ActiveRecord("companies",
DiscriminatorColumn="type",
DiscriminatorType="String",
DiscriminatorValue="NA")]
public abstract class Company<T> : ActiveRecordBase<T>, ICompany
{
[PrimaryKey]
private int Id { get; set; }
[Property]
public String Name { get; set; }
}
[ActiveRecord(DiscriminatorValue="firm")]
public class Firm : Company<Firm>
{
[Property]
public string Description { get; set; }
}
[ActiveRecord(DiscriminatorValue="client")]
public class Client : Company<Client>
{
[Property]
public int ChargeRate { get; set; }
}
これは、ほとんどの場合にうまく機能します。次のようなことができます。
var x = Client.FindAll();
しかし、時々私はすべての会社が欲しいです。ジェネリックを使用していない場合は、次のことができます。
var x = (Company[]) FindAll(Company);
Client a = (Client)x[0];
Firm b = (Firm)x[1];
それぞれの型に型キャストできる ICompany の配列を返す FindAll を記述する方法はありますか?
何かのようなもの:
var x = (ICompany[]) FindAll(Company<ICompany>);
Client a = (Client)x[0];
それとも、一般的なサポートをすべて間違って実装しようとしているのでしょうか?