Я уже прочитал Entity Framework One-To-One Mapping Issues, и это не дублируется, так как здесь спецификация бизнес-правил различна.Ошибка One to One в Entity Framework 4
Существует две таблицы, счета-фактуры и ордера.
Invoices
-> InvoiceID (Primary, Auto Number)
Orders
-> OrderID (Primary, Auto Number)
-> InvoiceID (FK InvoiceID of Invoices Table)
Теперь проблема заключается в том, что для этой ассоциации EF требует отношения «Один к многим», если имена свойств не совпадают. Если имена свойств одинаковы, то он служит назначению производного класса, но здесь Order не является производным классом или счетом-фактурой.
InvoiceID (ы) генерируются для каждой корзины покупок, но OrderID (ы) создаются только для платных счетов-фактур, поэтому каждый заказ имеет InvoiceID, но у каждого заказа нет соответствующего счета-фактуры.
Если я создаю отдельную таблицу для этого, тогда мне нужно написать слишком много кода, чтобы сделать это. Есть ли способ удалить это ограничение и позволить EF обрабатывать мою модель.
Однако, в настоящее время, если я изменить модель, как следовать, она работает
Invoices
-> InvoiceID (Primary, Auto Number)
Orders
-> OrderID (Auto Number)
-> InvoiceID (Primary, FK InvoiceID of Invoices Table)
Но это хорошая практика? Потому что по определению InvoiceID таблицы Orders, безусловно, будет уникальным, но мы будем ссылаться всюду на OrderID для сравнения и на множество других ссылок. Я знаю, что могу индексировать свойство, но я не чувствую, что этот дизайн идеален.
Спасибо, быстрый вопрос, будет ли работать с навигацией, или это не сработает, если я сделаю это таким образом? –
Нет проблем и, конечно же, они будут работать, я обновил свой ответ, чтобы показать вам два способа получить этот скрытый InvoiceId FK для Order Entity. –
Спасибо за помощь. –