2012-05-11 5 views
2

У меня есть два класса:Entity вставляет, когда я хочу, чтобы прикрепить

public class PartDefinition 
{ 
    public int Id { get; set; } 

    [Required] 
    [MaxLength(10)] 
    public string PartNumber { get; set; } 

    [Required] 
    public virtual Module Module { get; set; } 
} 

public class Module 
{ 
    public int Id { get; set; } 

    [Required] 
    [MaxLength(10)] 
    public string Name { get; set; } 
} 

Тогда я пытаюсь выполнить это действие:

PartDefinition part = new PartDefinition(partNumber, module); 
context.PartDefinitions.Add(part); 
context.SaveChanges(); 

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

Как это изменить?

+0

Что касается вашего примера кода, вы указали создание 'PartDefinition' с помощью конструктора, но не определили его раньше, это правильно? –

ответ

1

Поскольку у вас нет атрибутов [Key], представляющих первичные ключи в базе данных; каждый раз он добавляет новый модуль. Попробуйте маркировать свойство Id атрибутом [Key]. Также попробуйте использовать один и тот же экземпляр контекста при извлечении модуля и вставке части.

+0

Я пробовал это, но результат все тот же. Кроме того, я понял, что присвоение имени var Id указывает EF, что это идентификатор основного ключа. –

+1

@RickEyre используют тот же контекст для извлечения модуля и сохранения новой части? – daryal

+0

Нет, я не знаю. Должны ли они быть такими же? –

0

Вы уверены, что ваш идентификатор объекта модуля установлен в значение? Если он равен нулю, то Entity Framework увидит это как новое отношение.

+0

Идентификатор установлен правильно. –

+0

Рассмотрите возможность добавления значения идентификатора в PartDefinition. 'public int ModuleId {get; задавать; } открытый виртуальный модуль модуля {get; set;} ' – Oblivion2000

+0

Это тоже не работает. –

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