Этот вопрос задавался в нескольких вариантах, но я считаю, что моя проблема несколько уникальна.
Я использую подход с использованием базы данных в Entity Framework 4 и пытаюсь сопоставить Account
с несколькими Addresses
, а также сопоставить эту же учетную запись с BillingAddress
и ShippingAddress
.
Вот моя схема БД:
Счет
- ID
- BillingAddressID
- ShippingAddressID
Адрес
У меня есть 3 внешних ключа.
Account.BillingAddressID
до Address.ID
Account.ShippingAddressID
до Address.ID
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)
Есть мысли? Спасибо!