Tshumore Ответов: 1

Entityframework сохранение нескольких записей


У меня есть утилита, которая считывает состояние ресурсов сервера MicrosoftBizTalk .. в частности, компонент ReceiveLocation. Моя проблема заключается в том, что программа отправляет несколько записей каждого элемента, то есть каждый элемент в возвращаемых данных умножается на 25 таким образом, что вместо сохранения только 5 строк сохраняемые данные составляют 125. Так, например, вместо того, чтобы иметь только 1 строку для моего первого возвращенного ряда, у меня есть 25.

Это моя программа :

<pre> public List<BizTalk> GetBizTalkServicesStatistics()
        {

        
            List<BizTalk> model = new List<BizTalk>();

            try
            {
                //Create the WMI search object.
                ManagementObjectSearcher Searcher = new ManagementObjectSearcher();

                ConnectionOptions options = new ConnectionOptions
                {

                    Username = "+username+",
                    Password = "+password+",
                    Authority = "+domain+"
                };

                
                var server = "+server+";
                // create the scope node so we can set the WMI root node correctly.
                ManagementScope Scope = new ManagementScope("\\\\" + server + "\\root\\MicrosoftBizTalkServer", options);
                Searcher.Scope = Scope;

                // Build a Query to enumerate the MSBTS_ReceiveLocation instances if an argument
                // is supplied use it to select only the matching RL.

                    //if (args.Length == 0)
                    SelectQuery Query = new SelectQuery();               
                    Query.QueryString = "SELECT * FROM MSBTS_ReceiveLocation";
                    //          else
					//Query.QueryString = "SELECT * FROM MSBTS_ReceiveLocation WHERE Name = '" + args[0] + "'";


                // Set the query for the searcher.
                Searcher.Query = Query;

                // Execute the query and determine if any results were obtained.
                ManagementObjectCollection QueryCol = Searcher.Get();

                // Use a bool to tell if we enter the for loop
                // below because Count property is not supported
                bool ReceiveLocationFound = false;

                // Enumerate all properties.
                foreach (ManagementBaseObject envVar in QueryCol)
                {
                    // There is at least one Receive Location
                    ReceiveLocationFound = true;

                    PropertyDataCollection envVarProperties = envVar.Properties;
                   
                    foreach (PropertyData envVarProperty in envVarProperties)
                    {
                        BizTalk bizTalk = new BizTalk();
                        bizTalk.Name = Convert.ToString(envVar["Name"]);
                        bizTalk.TransportType = Convert.ToString(envVar["AdapterName"]);
                        bizTalk.Uri = Convert.ToString(envVar["InboundTransportURL"]);
                        bizTalk.Status = Convert.ToString(envVar["Name"]);
                        bizTalk.ReceiveHandler = Convert.ToString(envVar["HostName"]);
                        bizTalk.ReceivePort = Convert.ToString(envVar["ReceivePortName"]);
                        bizTalk.RunDate = DateTime.Now;
                        bizTalk.ApplicationId = 24;
                        bizTalk.ServerId = 8;
                        bizTalk.InstanceName = "FBCZOP";                                          
                        model.Add(bizTalk);
                        
                    }
                }

                if (!ReceiveLocationFound)
                {
                    Console.WriteLine("No receive locations found matching the specified name.");
                }
            }

            catch (Exception excep)
            {
                ExceptionLogger.SendErrorToText(excep);
            }

            return model;
        }


Функция Сохранения
<pre> public void SaveStatistics(BizTalk entity)
        {
            List<BizTalk> ServerInfo = new List<BizTalk>();
            ServerInfo = GetBizTalkServicesStatistics();
            foreach (var di in ServerInfo)
            {
                entity.RunDate = di.RunDate;
                entity.Name = di.Name;
                entity.Status = di.Status;
                entity.Uri = di.Uri;
                entity.InstanceName = di.InstanceName;
                entity.ReceivePort = di.ReceivePort;
                entity.TransportType= di.TransportType;
                entity.RunDate = DateTime.Now;
                entity.ReceiveHandler = di.ReceiveHandler;                
                entity.ServerId = entity.ServerId;
                entity.ApplicationId = entity.ApplicationId;
                appEntities.BizTalk.Add(entity);
                appEntities.SaveChanges();
            }

        }


Что я упускаю?

Что я уже пробовал:

Когда я перехожу через переменную кода envVarProperties показывает количество записей как 125 в разделе envVarProperties << ResultsView :
https://drive.google.com/file/d/1Tdzu-6OIoyRNEpLgeqntX8lCnnqNBZAy/view?usp=sharing

в то время как QueryCol переменная показывает количество 5 :
https://drive.google.com/file/d/1TdkPFD43awRBfQOceZ4luZlpNU7rLe03/view?usp=sharing

1 Ответов

Рейтинг:
2

Dave Kreskowiak

Не могу сказать, что ты теряешь. Нет ничего, что выделялось бы как неправильное в коде, который вы разместили.

EF записывает 125 записей, потому что ваш код предоставляет ему 125 объектов для записи.

Вам придется пройти через код, строка за строкой, и посмотреть, что происходит с каждой переменной.

Мы не можем сделать это для вас, потому что у нас нет вашего кода (даже не думайте пытаться отказаться от него для загрузки!), настройки вашего сервера, ваших данных ... ничего. Это будет целиком на твоей совести.