Как создать внешний ключ в EF6

#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? . Попробуй еще раз. Если это не сработает, вам придется создать новую базу данных