Exemplo n.º 1
0
        public static BitmapImageExpressionResult DeviceModelImage(DeviceModel DeviceModel)
        {
            if (DeviceModel == null)
                throw new ArgumentNullException("DeviceModel");

            using (Stream deviceModelImage = DeviceModel.Image())
            {
                if (deviceModelImage == null)
                    return null;
                else
                    return ImageFromStream(deviceModelImage);
            }
        }
Exemplo n.º 2
0
        public static Tuple<DeviceModel, bool> GetOrCreateDeviceModel(this DbSet<DeviceModel> DeviceModelsSet, string Manufacturer, string Model, string ModelType)
        {
            if (string.IsNullOrWhiteSpace(Manufacturer))
                Manufacturer = "Unknown";
            else
                Manufacturer = Manufacturer.Trim();

            if (string.IsNullOrWhiteSpace(Model))
                Model = "Unknown";
            else
                Model = Model.Trim();

            if (string.IsNullOrWhiteSpace(ModelType))
                ModelType = null;
            else
                ModelType = ModelType.Trim();

            // Already Exists?
            var deviceModel = DeviceModelsSet.FirstOrDefault(dm => dm.Manufacturer == Manufacturer && dm.Model == Model);
            if (deviceModel == null)
            {
                // Ensure only one thread/request at a time
                lock (_CreateDeviceModelLock)
                {
                    // Check again now that lock is enforced
                    deviceModel = DeviceModelsSet.FirstOrDefault(dm => dm.Manufacturer == Manufacturer && dm.Model == Model);

                    if (deviceModel == null)
                    {
                        // Create the Device Model in a different DataContext so we don't have to commit unrelated changes
                        using (DiscoDataContext database = new DiscoDataContext())
                        {
                            var description = $"{Manufacturer} {Model}";

                            if (Model.Equals("Unknown", StringComparison.OrdinalIgnoreCase))
                            {
                                description = $"Unknown {Manufacturer} Model";
                            }

                            var addDeviceModel = new DeviceModel
                            {
                                Manufacturer = Manufacturer,
                                Model = Model,
                                ModelType = ModelType,
                                Description = description
                            };
                            database.DeviceModels.Add(addDeviceModel);
                            database.SaveChanges();
                        }

                        // Obtain the Device Model with the in-scope DataContext
                        // - Overhead acknowledged, but reasonable given the infrequency of occurrence
                        deviceModel = DeviceModelsSet.FirstOrDefault(dm => dm.Manufacturer == Manufacturer && dm.Model == Model);
                        return new Tuple<DeviceModel, bool>(deviceModel, true);
                    }
                }
            }
            else
            {
                if (deviceModel.ModelType != ModelType)
                    deviceModel.ModelType = ModelType;
            }

            return new Tuple<DeviceModel, bool>(deviceModel, false);
        }