2010-10-28 2 views
1

первый немного фона. Вот SQLite скрипт я создал:Как сохранить внешний ключ с помощью Entity Framework?

create table Person(
ID integer not null primary key autoincrement, 
Name text not null 
); 

create table Department(
ID integer not null primary key autoincrement, 
Name text not null, 
Leader integer not null references Person(ID) 
); 

Он генерирует следующий Entity Framework модель:

alt text

Здесь я пытаюсь создать сделать простое приложение, так что я могу научиться используйте SQLite, поэтому я могу сохранить нового Person в базе данных, а также сохранить новый отдел. У отдела может быть только 1 руководитель, и человек может быть лидером многих отделов.

Сейчас я сосредоточен на создании нового отдела.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace SQLite_Testing_Grounds 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      LoadUsersToComboBox(); 
     } 

     private void LoadUsersToComboBox() 
     { 
      throw new NotImplementedException(); 
     } 

     private void button2_Click(object sender, EventArgs e) 
     {    
      CreateNewPerson(); 
     } 

     private void CreateNewPerson() 
     { 
      if (textBox2.Text != String.Empty) 
      { 
       ScansEntities1 db = new ScansEntities1(); 
       Person user = new Person() 
       { 
        Name = textBox1.Text 
       }; 

       db.AddToPeople(user); 
       db.SaveChanges(); 
      }    
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      CreateNewDepartment(); 
     } 

     private void CreateNewDepartment() 
     { 
      if ((textBox1.Text != String.Empty) && (comboBox1.SelectedIndex >= 0)) 
      { 
       ScansEntities1 db = new ScansEntities1();        
       Department department = new Department() 
       { 
        Name = textBox1.Text, 
        //Then what goes here? :/ 

       }; 
      } 
      throw new NotImplementedException(); 
     } 
    } 
} 

Как сохранить идентификатор выбранного «Человека» с помощью ComboBox?

alt text

EDIT!

Следуя совету Джона Х., мой класс отдела (сгенерированный EF) не содержит определения для Лидера (как я ожидал бы, если бы использовал MS SQL).

Вот скриншот того, что он делает есть. Еще раз спасибо за огромную помощь.

+0

, какая версия Entity Framework и Visual Studio вы используете? – Bhuvan

+0

Visual Studio 2010, .NET Framework 3.5, так что я предполагаю EF 3.5? – 2010-10-28 14:26:05

ответ

2

Вам необходимо вырезать человека и прикрепить его к использованию контекста, который зачеркнул человека в качестве справочника для вас, ЛИДЕР в вашем объекте отдела.

Stub Entities Referencehttp://blogs.msdn.com/b/alexj/archive/2009/06/19/tip-26-how-to-avoid-database-queries-using-stub-entities.aspx

private void CreateNewDepartment() 
    { 
     if ((textBox1.Text != String.Empty) && (comboBox1.SelectedIndex >= 0)) 
     { 
      ScansEntities1 db = new ScansEntities1(); 
      Person person = new Person() {Id = /*SomeId*/}; 
      db.AttachTo("Person", person); 
      Department department = new Department() 
      { 
       Name = textBox1.Text, 
       Person = person 

      }; 
      db.AddToDepartment(department); 
      db.SaveChanges(); 

     } 
    } 
+0

Здравствуйте, смотрите редактирование. Класс отдела не имеет определения для атрибута Leader. У него есть только ID, Name, Person, PersonReference. Это основа моей путаницы, спасибо за помощь! : D – 2010-10-28 14:31:47

+0

@ Sergio извините, что исправил свой ответ –

+0

Я пытаюсь загрузить combobox с людьми из БД, но он не работает: ScansEntities3 db = new ScansEntities3(); var people = db.People; comboBox1.DataSource = люди; Какие-либо предложения? – 2010-10-28 14:50:28

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