2012-08-13 2 views
0

У меня есть два entities- проекта и ProjectTypeLinking Связанных лиц в EF

Проект имеет -ID, TypeID, имя ProjectType имеет - идентификатор, имя

TypeId является внешним ключом между проектом и ProjectType таблицей

теперь говорят, что у меня есть объект под рукой после того, как делать что-то, как показано ниже

var selprojtype = db.ProjectTypes.Single(p => p.Name == id); 

тогда я говорю, что я создаю новый проект ж Хич Я хочу связать с типом проекта

Project project = new Project(); 

если я

project.ProjectType = selprojtype; 

TypeId не установлен. Поэтому я всегда заканчиваю настройкой внешних ключей, как показано ниже, перед вызовом метода SaveChanges.

project.TypeId= selprojecttype.ID 

Есть ли лучший способ связать связанные объекты?

+0

Вам не нужно устанавливать свойство внешнего ключа 'TypeId'. EF сохранит правильный FK при сохранении изменений. – Slauma

+0

Это не вопрос. – superartsy

+0

Вы получаете исключение, когда называете 'SaveChanges'? Можете ли вы показать полный контекст своего кода до SaveChanges и классов модели? Используете ли вы 'DbContext' или' ObjectContext'? – Slauma

ответ

0

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

var selprojtype = db.ProjectTypes.Single(p => p.Name == id); 
Project project = new Project(); 

//now add newly created project object to the context 
db.Projects.Attach(project); 

//now establish the relation 
project.ProjectType=selprojtype; 
+0

, если в базе данных с данным идентификатором нет данных, этот код будет генерировать исключение: db.ProjectTypes.Single (p => p.Name == id). он должен быть SingleOrDefault на всякий случай, который возвращает null, если нет данных с данным идентификатором. –

0

Что вы можете сделать это:

public int? TypeId { get; set; } 
private ProjectType projectType; 
public ProjectType ProjectType{ 
    get { return projectType;} 
    set { 
      projectType = value; 
      TypeId = value != null ? value.Id : null; 
     } 
} 

Таким образом, вы контролируете FK непосредственно при назначении отношения.

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