2015-04-24 3 views
2

В EF 6 (сначала код) можно настроить настройку навигации без принудительного ограничения ссылочной целостности?Навигационное свойство без ограничения ссылочной целостности в Entity Framework 6

Например:

public class Person{ 

    public IList<Pet> Pets { get; set; } 

} 

public class Pet{ 

    public int OwnerId { get; set; } 
    public Person Owner { get; set; } 

} 

Таким образом, в приведенном выше примере, я хотел бы иметь возможность добавить Пет с OwnerId, даже если владелец не существует в таблице владельцев.

Благодаря

Matt

+0

http://stackoverflow.com/questions/5691780/navigation-property-without-declaring-foreign-key – jdphenix

ответ

0

Короткий ответ: Не используйте EF. Весь объект Object Relational Mappers должен гарантировать, что у вас есть действующие данные, а также помощь в его получении/сохранении.

Все, что вы действительно хотите, это своего рода картограф.

Длинный ответ: Любопытный себя

2

Вы можете определить отношения с помощью текучего API.

modelBuilder.Entity<Pet> 
    .hasOptional(p => p.Owner) 
    .willCascadeOnDelete(false); 

Это будет настраивать свойство relational как необязательное и будет гарантировать, что удаление каскада не вступит в силу. Вы можете создать Pet без Owner, и удаление Owner не удалит связанные Pets.

Однако вы не можете назначить Pet.OwnerId к OwnerId, который не существует в Owner таблице. Если вам действительно необходимо каким-то образом отслеживать недопустимые значения OwnerId, вам нужно либо иметь отдельное свойство, которое вы вручную обновляете, либо произвольное значение, либо вам нужно будет определить эти объекты без использования свойства навигации и выполнить поиск вручную ,

Это была бы исключительная ситуация, когда вам нужно было бы указать произвольное значение для OwnerId, которое не соответствует таблице Owner; В 99% всех случаев необязательное отношение, которое принимает действительные OwnerId или null, - все, что необходимо.

Свойство OwnerId на самом деле не требуется на объекте Pet, но если оно присутствует, оно должно быть установлено равным int?.

+0

и 'OwnerID' должны иметь тип' int? '. –

+0

забыли, что детали, спасибо, что вы напомили мне. – Claies

Смежные вопросы