При сохранении модели возникла проблема.Вот мои родственные модели.
Марка:
public class Mark
{
public int Id { get; set; }
[Display(Name = "Марка")]
public string MarkName { get; set; }
public virtual ICollection<CarModel> CarModels { get; set; }
public virtual ICollection<Car> Cars { get; set; }
public Mark()
{
CarModels = new List<CarModel>();
Cars = new List<Car>();
}
}
CarModel:
public class CarModel
{
public int Id { get; set; }
[Display(Name = "Модель")]
public string ModelName { get; set; }
public int MarkId { get; set; }
public virtual Mark Mark { get; set; }
public virtual ICollection<Equipment> Equipments { get; set; }
public virtual ICollection<Car> Cars { get; set; }
public CarModel()
{
Equipments = new List<Equipment>();
Cars = new List<Car>();
}
}
Оборудование:
public class Equipment
{
public int Id { get; set; }
[Required]
public int Engine { get; set; }
[Required]
public int Power { get; set; }
[Required]
public int ReleaseYear { get; set; }
[Required]
public string DriveType { get; set; }
[Required]
public string Transmission { get; set; }
[Required]
public string Body { get; set; }
[Required]
public int MaxSpeed { get; set; }
[Required]
public int Weight { get; set; }
[Required]
public int MaxFuelVolume { get; set; }
[Required]
public string Color { get; set; }
[Required]
public string Picture { get; set; }
public int CarModelId { get; set; }
public virtual CarModel CarModel { get; set; }
public virtual ICollection<Car> Cars { get; set; }
public Equipment()
{
Cars = new List<Car>();
}
}
Автомобиль:
public class Car
{
public int Id { get; set; }
[Required]
public int Price { get; set; }
[Required]
public int Count { get; set; }
public int? MarkId { get; set; }
public virtual Mark Mark { get; set; }
public int CarModelId { get; set; }
public virtual CarModel CarModel { get; set; }
public int? EquipmentId { get; set; }
public virtual Equipment Equipment { get; set; }
public virtual ICollection<Order> Orders { get; set; }
public Car()
{
Orders = new List<Order>();
}
}
Итак, если я добавлю новую машину и в то же время новую марку, модель и комплектацию, хранилище будет хорошо, бренд создан, модель привязана к нему, модель в комплекте сМодель и ниже это сущность автомобиля со ссылками на все это.
Вот код для примера:
Context db = new Context();
Equipment equip = new Equipment()
{ Body = "Седан", Color = "Красный", DriveType = "Передний", Engine = 1600,
MaxFuelVolume = 60, MaxSpeed = 250, Picture = "Картинка", Power = 150,
ReleaseYear = 2015, Transmission = "Автомат", Weight = 2000 };
Mark mark = new Mark() { MarkName = "BMW" };
CarModel carModel = new CarModel() { ModelName = "M3" };
Car car = new Car();
car.Mark = mark;
car.CarModel = carModel;
car.Equipment = equip;
unitOfWOrk.Cars.Create(car);
unitOfWOrk.Save();
Но если я попытаюсь создать машину и ссылкусуществующая марка и существующая модель, но новая комплектация не удастся
Произошла ошибка при обновлении записей.Подробности смотрите во внутреннем исключении.
Вот пример кода:
Context db = new Context();
Equipment equip = new Equipment() { Body = "Седан", Color = "Красный", DriveType = "Передний", Engine = 1600,
MaxFuelVolume = 60, MaxSpeed = 250, Picture = "Картинка", Power = 150,
ReleaseYear = 2015, Transmission = "Автомат", Weight = 2000 };
Car car = new Car();
car.MarkId = 1;
car.CarModelId = 1;
car.Equipment = equip;
Насколько я понимаю, он ругается на public int CarModelId {get; set; }
в модели Equipment
, потому что я пыталсясделать int?
и тогда этой ошибки нет.Поэтому вопрос заключается в том, почему при создании новых данных сущность угадывает, с чем ее связать, а в случае добавления новых данных этого не происходит
InnerException:
Система.Data.SqlClient.SqlException: оператор INSERT конфликтовал с ограничением FOREIGN KEY "FK_dbo.Equipments_dbo.CarModels_CarModelId".Конфликт произошел в базе данных "D: \ AUTOSTORE \ AUTOSTORE \ APP_DATA \ AUTOSTOREDB.MDF", таблице "dbo.CarModels", столбце "Id".Заявление было прекращено.