Entity Framework 4 - Проектирование БД для обеспечения множественности от 1 до 1
Я столкнулся со сценарием в моем приложении, где я хотел бы иметь кратность 1:1 между сущностями, но я не знаю, как изменить мою базу данных, чтобы обеспечить это.
Допустим, у меня есть таблица документов и таблица индексов, где в документе всегда будет один индекс, а индекс будет содержаться только в одном документе. В таблице "Документ" у меня было поле "Индекс", поэтому сущность "Документ" имеет свойство навигации к своему индексу, но сущность "Индекс" имеет свойство навигации по коллекции "Документы", а это не то, что мне нужно, поскольку всегда будет только один связанный документ.
Было бы неплохо как-то отредактировать мою схему БД, чтобы при создании модели из БД сущность "Документ" имела единую навигацию к "Индексу", а "Индекс" имел единственное свойство навигации обратно к "Документу". Это возможно?
Я подумал, что, возможно, смогу отредактировать модель объекта или ее ассоциации в области дизайна модели, чтобы это произошло. Но я обеспокоен тем, что на каком-то этапе, если я перезагружу модель, она сбросит эту и любые другие подобные ей.
Существует ли элегантное решение, позволяющее EF автоматически понимать, что существует кратность 1:1?
Спасибо за любой совет!
1 ответ
Ваша база данных не моделирует отношения 1:1 между Document и Index, поэтому EF также не моделирует их. Для использования 1:1 ваш документ и индекс должны совместно использовать первичный ключ. Это означает, что вы определите Document с некоторым PK (возможно, автоматически сгенерированным), и вы определите Index с PK того же типа, а также вы определите FK, в котором будут участвовать PK с обеих сторон. Это обеспечит связь 1:0..1 между Документом и Индексом. 0..1 потому, что вам всегда нужно сначала вставить документ, а после этого вам нужно вставить индекс (документ будет жить без индекса в течение доли секунды). На вашей логике приложения лежит ответственность за обеспечение того, чтобы Документ всегда был вставлен вместе с Индексом.