में सार तत्वों की क्वेरी करना मैं टेबल प्रति पदानुक्रम डेटाबेस विरासत का उपयोग कर रहा हूं जहां सभी व्युत्पन्न प्रकारों के लिए कॉलम एक ही तालिका में हैं। प्रत्येक व्युत्पन्न तालिका एक स्ट्रिंग Discriminator क्षेत्र है कि व्युत्पन्न वर्ग के नाम रखती है का उपयोग कर की पहचान की है: उम्मीदडैपर
---------------------
| tanimal |
---------------------
| animalid |
| discriminator |
| furcolour |
| feathercolour |
---------------------
public abstract class Animal
{
public int AnimalId { get; set; }
public string Discriminator { get { return GetType().Name; } }
}
public class Bird : Animal
{
public string FeatherColour { get; set; }
}
public class Dog : Animal
{
public string FurColour { get; set; }
}
के रूप में, जब डैप्पर की क्वेरी प्रणाली द्वारा इस पुन: प्राप्त करने मैं Instances of abstract classes cannot be created
प्राप्त करते हैं। मैं आशा करता हूं कि यह जानवरों की सूची को उनके मूल्यों के साथ संबंधित व्युत्पन्न प्रकारों के साथ वापस कर देगा।
var animals = Connection.Query<Animal>("SELECT * FROM tanimal")
इसके लिए समर्थन जोड़ने के मेरे प्रयास असफल रहे हैं। एक अमूर्त वर्ग तो है में से पहले SqlMapper.cs :: GetTypeDeserializer() यदि प्रकार पारित किया जा रहा कहा जाता है मैं एक के साथ प्रकार निम्न विधि में लौट आए बदल देते हैं:
static Type GetDerivedType(Type abstractType, IDataReader reader)
{
var discriminator = abstractType.GetProperty("Discriminator");
if (discriminator == null)
throw new InvalidOperationException("Cannot create instance of abstract class " + abstractType.FullName + ". To allow dapper to map to a derived type, add a Discriminator field that stores the name of the derived type");
return Type.GetType((string)reader["Discriminator"]);
}
हालांकि यह इस बिंदु पर की तरह दिखता है पाठक खोला नहीं गया है इसलिए यह Invalid attempt to read when no data is present
के साथ विफल रहता है।
क्या यह सही दृष्टिकोण है? क्या इस जगह का समर्थन करने के लिए कोई प्रयास किया गया है?
https: // GitHub। कॉम/स्टैक एक्सचेंज/डैपर-डॉट-नेट/अंक/262 – ajbeaven