2015-07-10 3 views
0

Я получаю прерывистый ошибкуОпределение внешних ключей в Entity Framework

ошибка при сохранении объектов, которые не выставляют иностранные ключевое свойство для их отношений

Я считаю, это может быть потому, что у меня есть не правильно определены мои отношения в моем уровне базы данных сущности.

Я определил таблицу с 1: 1 отношения как таковые:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 


    public FinalisedServices Service { get; set; } 

Где SpproFinalisedServices это внешний ключ. Должен ли я написал так:

 public int FinalisedSerivce_Id { get; set; } 

    [ForeignKey("FinalisedSerivce_Id")] 
    public FinalisedServices Service { get; set; } 

или в качестве альтернативы будет добавление виртуального будет достаточно для:

public virtual FinalisedServices Service { get; set; } 

я первоначально предполагалось, что структура субъект бы обрабатываются базы данных внешних ключей в фоновом режиме.

+0

Вы посмотрели на внутреннее исключение? Это (обычно) показывает, с какими объектами и отношениями EF возникает проблема. И это должно помочь диагностировать проблему. –

+0

проблема возникает только в живой системе. Мне нужно также загладить внутреннее исключение, но надеялось решить его, прежде чем это произойдет снова. – michael

ответ

1
public virtual ICollection<FinalisedQuoteStaff> JobManagers { get; set; } 

public virtual ICollection<FinalisedQuoteStaff> AllocatedStaff { get; set; } 

Это не определяет отношения один к одному. Каждый раз, когда вы включаете коллекцию, вы определяете «один-ко-многим» или «многие-ко-многим». Основываясь на вашем другом коде, я предполагаю, что вы собираетесь использовать один-ко-многим. То есть несколько менеджеров и сотрудников на одной службе. Пожалуйста, проверьте это tutorial. Вам не нужно явно указывать внешний ключ в Finalized Service. Это касается ситуаций, когда есть несколько внешних ключей и/или внешних ключей, которые называются иначе, чем таблица внешнего ключа.

Вам также НЕ нужно [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - это стандартная конфигурация - она ​​будет делать это по умолчанию. Вам понадобится, если вы назовете поле «Id» что-то странное. Это автоматический, когда вы называете его «Идентификатор».

+0

жаль, что я не должен был включать отношения многих из многих. они не имеют никакого отношения к вопросу, но я догадываюсь, что ответ им не требуется, а не моя проблема. – michael

+0

Вам нужно опубликовать все ваши таблицы. Меняйте имена, если что-то является собственностью, просто убедитесь, что они последовательны - маленькие вещи, подобные «s» в конце, и то, как вы называете, что-то имеет значение здесь, как я уверен, вы знаете. – VSO

+0

@michael: В качестве примера public FinalisedServices Service {get; задавать; } - это должно быть «FinalizedService», а не множественное число. Предполагая, что у вас есть ОДИН сервис. В противном случае это должен быть сбор услуг. – VSO

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