Можно ли использовать универсальную поддержку с наследованием одной таблицы и при этом иметь возможность 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];
Есть ли способ написать FindAll, который возвращает массив ICompany, которые затем могут быть преобразованы по типу в их соответствующие типы?
Что-то вроде:
var x = (ICompany[]) FindAll(Company<ICompany>);
Client a = (Client)x[0];
Или, может быть, я собираюсь реализовать общую поддержку неправильно?