Ok, donc j'ai une classe abstraite appelée produit. J'ai 3 tables appelées Items, Kits et Packages qui implémentent le produit. Le produit possède une propriété publique qui expose la clé primaire de l'objet.Obtenir l'entité de la table à l'aide de la réflexion de type abstrait
Cela dit j'ai une forme où je passe un produit. Je voudrais tirer ce produit hors d'un nouveau contexte de données sans devoir écrire un gros commutateur reflétant son type pour obtenir sa table appropriée.
Je voulais faire quelque chose comme ça, mais le bit cast n'acceptera pas foo.
public BuilderInclusionsForm(Product p) : this()
{
Type foo = p.GetType();
product = db2.GetTable(p.GetType()).Cast<foo>().SingleOrDefault(a =>
a.ProductID == p.ProductID);
ou ceci:
public BuilderInclusionsForm(Product p) : this()
{
Type foo = p.GetType();
product = db2.GetTable(p.GetType()).OfType<foo>().SingleOrDefault(a =>
a.ProductID == p.ProductID);
Au risque de paraître idiot. La forme n'est pas statique, cela semble compliquer les choses. Classe publique partielle BuilderInclusionsForm: Office2007Form De plus, il semble vouloir un type de retour pour FindProduct. – Echostorm
Oups - correction de FindProduct. Si vous ne pouvez pas faire de BuilderInclusionsForm un type générique, l'appel de méthode générique peut être la meilleure solution. –
Merci. Je rencontre toujours des problèmes car FindProduct ne peut pas être statique car il doit avoir le datacontext et le productID d'origine, je pense que cela cause un nullref sur le bit MakeGenericMethod. – Echostorm