使用STI和ActiveRecordBase<>具有完整的 FindAll
是否可以使用单表继承的通用支持,并且仍然能够 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];
或者也许我正在实施的通用支持全错了?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
怎么样:
请注意,您不能只是将您的公司贬低为客户或公司,您需要使用适当的多态性或访问者。有关说明,请参阅此。
How about this:
Note that you can't just downcast your Companies as Clients or Firms, you need to use proper polymorphism or a visitor. See this for an explanation.