#c# #entity-framework
Вопрос:
У меня есть два класса БД, определенных, как показано ниже
[Table("Warehouses")]
public class Warehouse : FullAuditedEntity, IMustHaveTenant
{
public virtual int TenantId { get; set; }
[Required]
[MaxLength(255)]
public string Name { get; set; }
public virtual WarehouseAddress Address { get; set; }
[ForeignKey("FKWarehouseAddressId")]
public int AddressId { get; set; }
}
и
[Table("Customers")]
public class Customer : FullAuditedEntity, IMustHaveTenant
{
public virtual int TenantId { get; set; }
public virtual Warehouse Warehouse { get; set; }
[ForeignKey("FK_WarehouseId")]
public int WarehouseId { get; set; }
[Required]
[MaxLength(255)]
public string CustomerName { get; set; }
public virtual DistributionRoute DistributionRoute { get; set; }
[ForeignKey("FKRouteId")]
public int RouteId { get; set; }
public virtual CustomerAddress CustomerAddress { get; set; }
[ForeignKey("FKAddressId")]
public int AddressId { get; set; }
}
Я хочу, чтобы у каждой записи в таблице «Клиенты» был столбец WarehouseId, который ссылается на столбец идентификатора в таблице «Склады». Я не уверен, где я ошибаюсь, потому что для столбца routeId, который находится в таблице DistributionRoute, он работает нормально. Может кто-нибудь помочь. Когда я пытаюсь обновить свою базу данных, я получаю сообщение об ошибке ниже:
Инструкция ALTER TABLE противоречит ограничению ВНЕШНЕГО КЛЮЧА «FK_Customers_Warehouses_WarehouseId». Конфликт произошел в базе данных «StoreDb», таблица «dbo.Склады», колонка «Идентификатор».
Ответ №1:
вы должны исправить классы, я не знаю, для чего нужны другие свойства. Я могу только догадываться, что некоторые из них вам не нужны, поэтому я показываю только те свойства, которые вам нужны для создания одного ко многим между складом и клиентом
[Table("Warehouses")]
public class Warehouse : FullAuditedEntity, IMustHaveTenant
{
.....
[InverseProperty(nameof(Customer.Warehouse))]
public virtual ICollection<Customer> Customers { get; set; }
}
[Table("Customers")]
public class Customer : FullAuditedEntity, IMustHaveTenant
{
......
public int? WarehouseId { get; set; }
[ForeignKey(nameof(WarehouseId))]
[InverseProperty("Customers")]
public virtual Warehouse Warehouse { get; set; }
}
ты должен очистить свои классы. Добавьте в эти свойства только те свойства, которые существуют в вашей базе данных. После этого вам необходимо выполнить миграцию БД.
Комментарии:
1. Просто попробовал это, и я получаю ту же ошибку
2. @MutongiGava Хорошо , я не знал, что ваша база данных существует. Я изменил public int WarehouseId на int? . Попробуй еще раз. Если это не сработает, вам придется создать новую базу данных