मेरे पास नीचे की तरह इकाई वर्ग संरचना है, जिसमें कक्षाओं से संबंधित जेसन कॉलम हैं और मैं कुछ मूल्यों के साथ इकाई को अद्यतन करने की प्रक्रिया में हूं।

[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "CA2227:Collection properties should be read only", Justification = "ORM", Scope = "module")]
public class DesignProject : PatchEntityProperties
{
    [Key, GraphQLNonNullType]
    public string ProjectNumber { get; set; }
    public string Name { get; set; }
    [Column(TypeName = "jsonb")]
    public ProjectSectionStatus SectionStatuses { get; set; } = new ProjectSectionStatus();
}

और फिर ProjectSectionStatus वर्ग नीचे जैसा दिखता है

public class ProjectSectionStatus
{
    public Guid Id { get; set; } = Guid.NewGuid();
    [JsonConverter(typeof(JsonStringEnumConverter))]
    public ProjectSectionStage ExecutiveSummarySectionStatus { get; set; } = ProjectSectionStage.NOT_STARTED;
    [JsonConverter(typeof(JsonStringEnumConverter))]
    public ProjectSectionStage CodesAndGuidelinesSectionStatus { get; set; } = ProjectSectionStage.NOT_STARTED;
    public string CodesAndGuidelinesSectionNotesHTML { get; set; } = "";
    [JsonConverter(typeof(JsonStringEnumConverter))]
    public ProjectSectionStage AirSystemsSectionStatus { get; set; } = ProjectSectionStage.NOT_STARTED;
    public string AirSystemsSectionNotesHTML { get; set; } = "";
    [JsonConverter(typeof(JsonStringEnumConverter))]
    public ProjectSectionStage ExhaustEquipmentSectionStatus { get; set; } = ProjectSectionStage.NOT_STARTED;
    public string ExhaustEquipmentSectionNotesHTML { get; set; } = "";
    ....
    .....
    .....
}

नीचे वह जगह है जहां मैं targetdesignproject के लिए अनुभाग स्थितियों में कुछ गुणों को अपडेट कर रहा हूं

 var targetDesignProject = this._dbContext.DesignProjects.Where(a => a.ProjectNumber == targetProjectNumber).SingleOrDefault();
 targetDesignProject.SectionStatuses.AirSystemsSectionStatus = Entities.Enums.ProjectSectionStage.INCOMPLETE;
 targetDesignProject.SectionStatuses.CodesAndGuidelinesSectionStatus = Entities.Enums.ProjectSectionStage.INCOMPLETE;
 targetDesignProject.SectionStatuses.ExecutiveSummarySectionStatus = Entities.Enums.ProjectSectionStage.INCOMPLETE;
 targetDesignProject.SectionStatuses.ExhaustEquipmentSectionStatus = Entities.Enums.ProjectSectionStage.INCOMPLETE;
 targetDesignProject.SectionStatuses.InfiltrationSectionStatus = Entities.Enums.ProjectSectionStage.INCOMPLETE;
        ......
        ......

10 या अधिक समान स्थिति गुण हैं जिन्हें मुझे INCOMPLETE एनम स्थिति के साथ एक-एक करके अपडेट करने की आवश्यकता है, इसलिए मैंने एक बार में सभी को अपडेट करने के लिए प्रतिबिंब विधि का उपयोग करके नीचे दृष्टिकोण की कोशिश की है लेकिन मूल्य निर्धारित करने पर अटक गया है

 PropertyInfo[] properties = targetDesignProject.SectionStatuses.GetType().GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
            
 foreach (PropertyInfo property in properties)
 {
    var propValue = property.GetValue(targetDesignProject.SectionStatuses);

    if (propValue is ProjectSectionStage)
    {
       property.SetValue() // not sure how to update here 
    }
 }

क्या इन स्थितियों को Incomplete एनम स्थिति के साथ प्रतिबिंब का उपयोग करके अद्यतन करने का कोई तरीका है। क्या कोई हमें सुझावों में विचार बता सकता है कि प्रतिबिंब का उपयोग करके इन्हें कैसे अपडेट किया जाए जो मेरे लिए बहुत आभारी होगा।

अग्रिम में धन्यवाद

अद्यतन :

foreach (PropertyInfo property in properties)
{
     var propValue = property.GetValue(targetDesignProject.SectionStatuses);

     if (propValue is ProjectSectionStage)
     {
           property.SetValue(targetDesignProject, ProjectSectionStage.INCOMPLETE, null); 
           // getting an error - Object does not match target type
      }
 }
0
Enigma State 10 जुलाई 2020, 02:42

2 जवाब

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

मैंने नीचे दिए गए कोड का उपयोग करके इस समस्या को हल कर लिया है:

foreach (PropertyInfo property in properties)
{
     var propValue = property.GetValue(targetDesignProject.SectionStatuses);

     if (propValue is ProjectSectionStage)
     {
           property.SetValue(targetDesignProject.SectionStatuses, ProjectSectionStage.INCOMPLETE, null); 
           // getting an error - Object does not match target type
      }
 }
0
Enigma State 10 जुलाई 2020, 03:23

तुम कर सकते हो

PropertyInfo[] properties = targetDesignProject.SectionStatuses.GetType().GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
            
 foreach (PropertyInfo property in properties)
 {
    var propValue = property.GetValue(targetDesignProject.SectionStatuses);

    if (propValue is ProjectSectionStage)
    {
       property.SetValue(targetDesignProject.SectionStatuses, propValue)

       // You can do this if you want
       // var newPropValue = rojectSectionStage.INCOMPLETE;
       // property.SetValue(targetDesignProject.SectionStatuses, newPropValue)
    }
 }

साथ ही, यदि आप अधिक दस्तावेज़ीकरण चाहते हैं तो आप इन पृष्ठ का संदर्भ ले सकते हैं:

https://docs.microsoft.com/en-us/dotnet/api/system.reflection.propertyinfo.setvalue?view=netcore-3.1

https:// docs.microsoft.com/en-us/dotnet/api/system.reflection.propertyinfo.setvalue?view=netcore-3.1#System_Reflection_PropertyInfo_SetValue_System_Object_System_Object_System_Object___

0
Manni Dula 10 जुलाई 2020, 03:29