C# 如何使用实体框架保存外键?
首先是一些背景。以下是我创建的SQLite脚本:C# 如何使用实体框架保存外键?,c#,entity-framework,sqlite,C#,Entity Framework,Sqlite,首先是一些背景。以下是我创建的SQLite脚本: 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(
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)
);
它生成以下实体框架模型:
在这里,我试图创建一个简单的应用程序,这样我就可以学习如何使用SQLite,这样我就可以将一个新人保存到数据库中,也可以保存一个新部门。一个部门只能有一名领导,一个人可以是多个部门的领导
现在我正专注于创建一个新部门
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();
}
}
}
如何使用组合框保存所选“人员”的ID
编辑强>
按照John H.的建议,我的Department类(由EF生成)不包含Leader的定义(如果我使用MS SQL,我会想到这一点)
下面是它的屏幕截图。再次感谢您的大力帮助。
您需要在部门对象中划掉该人员并将其附加到上下文中,使用该划掉的人员作为您的领导的参考
您正在使用哪个版本的实体框架和visual studio?visual studio 2010、.NET Framework 3.5,所以我猜是EF 3.5?您好,请参阅编辑。Department类没有Leader属性的定义。它只有ID、姓名、人员、PersonReference。这是我困惑的基础,谢谢你的帮助!:我正在尝试从数据库中加载包含人员的组合框,但它似乎不起作用:ScansEntities3 DB=new ScansEntities3();var people=db.people;comboBox1.DataSource=人;有什么建议吗?
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();
}
}