मैं किसी दिए गए स्ट्रिंग से किसी इकाई का type प्राप्त करने का प्रयास कर रहा हूं। मेरा अंतिम लक्ष्य उपयोगकर्ताओं के लिए मेरे डेटाबेस का पता लगाने के लिए एक जीयूआई रखने के लिए एक इंटरफ़ेस (यूआई इंटरफ़ेस) बनाना है। उनके पास मूल रूप से टेबल और उनके फ़ील्ड का पेड़ होता है और जैसे ही वे फ़ील्ड चुनते हैं, मैं बैकएंड पर SQL क्वेरी बनाना चाहता हूं और डेटा वापस करना चाहता हूं। मैं टाइप प्राप्त करने के तरीके पर अटक रहा हूं।

मैं इन धागों के बीच एक समाधान को एक साथ जोड़ने की कोशिश कर रहा हूँ:

यहाँ मेरा वर्तमान प्रयास है:

var type1 = _dbContext.Model.FindEntityType("Chadwick.Database.Entities.Appearances");
var type = _dbContext.Appearances.GetType();
var context = _dbContext.Set(typeof(Appearance)); // this works. I just need to pass in a variable instead of the actual type
var stuff = await context.FromSql("SELECT TOP 100 * FROM Appearances").ToListAsync();
// var data = await _dbContext.Appearances.Select(a => new {a.PlayerId}).Take(100).ToListAsync();
return new OkObjectResult(stuff);

अनिवार्य रूप से, मुझे कभी नहीं पता चलेगा कि वे "उपस्थिति" के बाद हैं, इसलिए मैं केवल सटीक प्रकार प्रदान नहीं कर सकता, मुझे इसे संदर्भ से (स्ट्रिंग द्वारा) लाने की आवश्यकता है।

क्या स्ट्रिंग द्वारा वास्तविक प्रकार प्राप्त करने का कोई तरीका है?

मुझे पता है कि मैं ऐसा कुछ कर सकता था, लेकिन यह अनावश्यक लगता है (लगभग 20 टेबल हैं और और भी होंगे)

public Type GetTypeByName(string name)
{
    switch (name)
    {
        case "Appearances":
            return typeof(Appearance);
        case "AwardsManagers":
            return typeof(AwardsManager);
    }

    return null;
}
1
mwilson 25 मई 2019, 04:19

1 उत्तर

सबसे बढ़िया उत्तर

मूल रूप से आपको इकाई वर्ग नाम स्थान को जानने की आवश्यकता है, क्योंकि नाम ही इकाई प्रकार को विशिष्ट रूप से पहचानने के लिए पर्याप्त नहीं है।

एक बार जब आप यह जान लेते हैं, तो आप अपने पहले प्रयास की तरह FindEntityType विधि का उपयोग करके उस इकाई के लिए EF कोर मेटाडेटा प्राप्त कर सकते हैं:

var entityType = _dbContext.Model.FindEntityType("Chadwick.Database.Entities." + className);

उस पद्धति का परिणाम null है यदि ऐसी कोई इकाई मौजूद नहीं है, IEntityType उदाहरण अन्यथा। इसका उपयोग इकाई से संबंधित अन्य ईएफ कोर मेटाडेटा प्राप्त करने के लिए किया जा सकता है, जैसे गुण, नेविगेशन, टेबल नाम इत्यादि। और संबंधित वर्ग का प्रकार जो आपको चाहिए ClrType संपत्ति द्वारा प्रदान किया जाता है:

var classType = entityType.ClrType;
4
Ivan Stoev 26 मई 2019, 08:41