Как создать сущность с несколькими свойствами навигации для одной и той же таблицы? - PullRequest
1 голос
/ 27 сентября 2011

Этот вопрос задавался в нескольких вариантах, но я считаю, что моя проблема несколько уникальна.

Я использую подход с использованием базы данных в Entity Framework 4 и пытаюсь сопоставить Account с несколькими Addresses, а также сопоставить эту же учетную запись с BillingAddress и ShippingAddress.

Вот моя схема БД: Счет

  • ID
  • BillingAddressID
  • ShippingAddressID

Адрес

  • AccountID

У меня есть 3 внешних ключа.

  1. Account.BillingAddressID до Address.ID
  2. Account.ShippingAddressID до Address.ID
  3. Address.ID до Account.ID

Я хотел бы иметь следующую настройку POCO:

public class Account {

    public int ID { get; set; }        

    public virtual Address BillingAddress { get; set; }

    public virtual Address ShippingAddress { get; set; }

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

public class Address {

    public int ID { get; set; }        

    public int AccountID { get; set; }
}

Тем не менее, когда я делаю это и пытаюсь создать новую учетную запись с адресом, я получаю следующую ошибку:

"Произошла ошибка при сохранении сущностей, которые не предоставляют свойства внешнего ключа для своих отношений."

Одна мысль, которая у меня возникла, заключалась в том, чтобы изменить схему на полное отношение «многие ко многим» между учетной записью и адресом. Тогда, я думаю, я мог бы поместить Billing vs. Shipping vs. Other в таблицу AccountAddresses и использовать ее во внешних ключах, но мне действительно интересно, смогу ли я заставить ее работать как есть.

Account a = new Account();
// snip: add some account properties

Account.Addresses.Add(new Address {
    // snip: some properties here
});

context.SaveChanges();

==> ERROR (as mentioned above)

Есть мысли? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...