У вас есть отношение 1 к 1 с общим первичным ключом в таблицах Order
и Contact
: PK контакта всегда должен совпадать с PK связанного заказа.Это имеет некоторые последствия:
- Только один из столбцов PK в таблице
Order
и Contact
может быть автоматически сгенерированным идентификатором.Я предполагаю, что это таблица Order
. - Если у
order
уже был Contact
до назначения нового, вы должны явно удалить старый контакт из базы данных, поскольку вы не можете иметь два контакта стот же OrderId, поскольку это одновременно PK. - Поскольку таблица
Contact
не имеет столбца идентификаторов, вы должны указать PK вручную в коде, и это должен быть PK заказа.
Чтобы сложить это, это может выглядеть так:
context.Orders.Attach(order);
if (order.Contact != null)
context.DeleteObject(order.Contact);
order.Contact = new Contact() { OrderId = order.Id, EmailAddress = "hello" };
context.SaveChanges();
Это предполагает, что 1) старый order.Contact
загружается в объект заказа, если ранее уже был КонтактВы назначаете новый и 2) что свойство OrderId
из Contact
является свойством PK.