Предотвращение дублирования значений в приложении WinForms - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь добавить объект 'Car' в базу данных. Он имеет несколько значений из разных, и я не хочу, чтобы какое-либо из них дублировалось. Пример:

У меня есть таблица CarType. В ней четыре поля:

  • Седан
  • Джип
  • Hatchback
  • Coupe

При добавлении новой машины, пользователь выбирает одно из этих полей (например, Седан), и я не хочу, чтобы в таблице «CarType» было еще одно поле «Седан».

Снимок экрана приложения

Я пытался предотвратить дублирование с помощью этого решения:

        Manufacturer checkManufacturer;
        Model checkModel;
        Levy checkLevy;
        DealType checkDealType;
        FuelType checkFuelType;
        Transmission checkTransmission;
        CarType checkCarType;
        Wheel checkWheel;

        using (var _ctx = new MyAutoGuramEntities2())
        {
            checkManufacturer = _ctx.Manufacturers.Where(c => c.Title.Equals(manufacturerInput)).FirstOrDefault();
            checkModel = _ctx.Models.Where(c => c.Title.Equals(modelInput)).FirstOrDefault();
            checkLevy = _ctx.Levies.Where(c => c.LevyValue.Equals(levyInput)).FirstOrDefault();
            checkDealType = _ctx.DealTypes.Where(c => c.TypeTitle.Equals(dealTypeInput)).FirstOrDefault();
            checkFuelType = _ctx.FuelTypes.Where(c => c.FuelTypeTitle.Equals(fuelTypeInput)).FirstOrDefault();
            checkTransmission = _ctx.Transmissions.Where(c => c.TransmissionType.Equals(transmissionInput)).FirstOrDefault();
            checkCarType = _ctx.CarTypes.Where(c => c.CarTypeValue.Equals(carTypeInput)).FirstOrDefault();
            checkWheel = _ctx.Wheels.Where(c => c.Side.Equals(wheelInput)).FirstOrDefault();
        }



        using (var _context = new MyAutoGuramEntities2())
        {
            //MANUFACTURER
            var manufacturer = new Manufacturer();
            if(checkManufacturer != null)
            {
                if (manufacturerInput != checkManufacturer.Title)
                {
                    manufacturer = new Manufacturer
                    {
                        ID = Guid.NewGuid(),
                        Title = manufacturerInput
                    };
                }
                else
                {
                    manufacturer = new Manufacturer
                    {
                        ID = checkManufacturer.ID,
                        Title = checkManufacturer.Title
                    };
                }
            }
            else
            {
                manufacturer = new Manufacturer
                {
                    ID = Guid.NewGuid(),
                    Title = manufacturerInput
                };
            }


            //MODEL
            var model = new Model();
            if (checkModel != null)
            {
                if (modelInput != checkModel.Title)
                {
                    model = new Model()
                    {
                        ID = Guid.NewGuid(),
                        Title = modelInput,
                        ManufacturerID = manufacturer.ID
                    };
                }
                else
                {
                    model = new Model()
                    {
                        ID = checkModel.ID,
                        Title = checkModel.Title,
                        ManufacturerID = checkModel.ManufacturerID
                    };
                }
            }
            else
            {
                model = new Model()
                {
                    ID = Guid.NewGuid(),
                    Title = modelInput,
                    ManufacturerID = manufacturer.ID
                };
            }


            //CarType
            var carType = new CarType();

            if (checkCarType != null)
            {
                if (carTypeInput != checkCarType.CarTypeValue)
                {
                    carType = new CarType()
                    {
                        ID = Guid.NewGuid(),
                        CarTypeValue = carTypeInput
                    };
                }
                else
                {
                    carType = new CarType()
                    {
                        ID = checkCarType.ID,
                        CarTypeValue = checkCarType.CarTypeValue
                    };
                }

            }
            else
            {
                carType = new CarType()
                {
                    ID = Guid.NewGuid(),
                    CarTypeValue = carTypeInput
                };
            }

И так далее на каждой собственности .. В конце я добавляю все в БД следующим образом:

  _context.Manufacturers.Add(manufacturer);
            _context.Models.Add(model);
            _context.CarTypes.Add(carType);
            _context.FuelTypes.Add(fuelType);
            _context.Levies.Add(levy);
            _context.DealTypes.Add(dealType);
            _context.Wheels.Add(wheel);
            _context.Transmissions.Add(transmission);

Этот код вызвал ошибку PrimaryKey. В частности:

SqlException: Нарушение ограничения PRIMARY KEY 'PK_CarType'. Не могу вставьте дубликат ключа в объект 'dbo.CarType'. Дубликат значения ключа (bb08d23a-f583-4b24-a335-282cd90e9299). Заявление было прекращено.

Я понимаю причину проблемы. Идентификатор CarType не может быть дублирован, но как я могу это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...