Я пытаюсь добавить объект '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 не может быть дублирован, но как я могу это исправить?