1

Я сначала использую код для создания приложения управления клиентами. Клиент может иметь много адресов, но только один «главный» адрес.Как я могу сопоставить существующий внешний ключ с навигационным свойством с первым кодом

Вот моя модель Клиента:

public class Customer 
{ 
    [Key] 
    public int Id { get; set; } 

    public string FirstName{ get; set; } 

    public string LastName{ get; set; } 

    public int MainInvoicingAddressId { get; set; } 

    [ForeignKey("MainBillingAddressId")] 
    public Address MainBillingAddress { get; set; } 

    public virtual ICollection<Address> Addresses { get; set; } 

И мой адрес Модель:

public class Address 
    { 
     [Key] 
     public int Id { get; set; } 

     public string Address1 { get; set; } 

     public int CustomerId { get; set; } 

     [ForeignKey("CustomerId")] 
     public virtual Customer Customer { get; set; } 
    } 

Но когда я создать базу данных, у меня есть автогенерируемый внешний ключ customer_id на адреса таблицы, из-за навигационное свойство MainBillingAddress.

Стол на адресах, у меня есть 2 внешних ключа для клиента («CustomerId» и «Customer_Id»).

Я хочу использовать существующий внешний ключ «CustomerId» для связи с MainBillingAddress.

Возможно ли это?

ответ

0

AFAIK, что вы хотите, не может быть выполнено с помощью EF. WAHT вы, кажется, хотите есть:

  1. 12:59 соотношение между Клиентом и адресом, и
  2. один ко многим отношения между Клиентом и адресом.

Это не может быть сделано, поскольку с EF, 1. подразумевается FK < => PK. (для example), что несовместимо с 2 ..

Я смиренно предлагаю вам прочитать How to implement a one-to-many relationship with an "Is Current" requirement и заменить «Is Current» на «Is main».

Я могу представить себе другое решение, как

modelBuilder.Entity<Customer>(). 
    HasOptional(x => x.MainBillingAddress). // or required 
    WithMany(y => y.IsDefaultFor); 

но это по крайней мере, приводит к круговому refrences.