0
是否有可能使用通用支持單表繼承,並仍然能夠查找所有的基類?使用STI和ActiveRecordBase <>與全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];
或者,也許我會有關實現通用的支持都錯了?
我寧願避免需要所有我的子類中介。我只需要在場合找到所有公司。我會一直使用公司和客戶的通用功能。 而且,我正在使用downcast來顯示數組包含客戶端的升級形式。它不僅包含公司的。我有可能不會假定無序數組中的第一個對象也是一個Client。 – oillio 2010-05-05 21:51:42
如果您希望能夠執行'Client.FindAll()',您必須在客戶端實現靜態方法,使用'ActiveRecordMediator' –
2010-05-05 22:44:06