C# 实体框架,根据特定条件插入对象

C# 实体框架,根据特定条件插入对象,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我必须解决以下问题。 我收集了大量XML文件。在每个XML文件中都有不同的员工。我必须将唯一的员工添加到数据库中。在数据库中,每个员工都有名字、姓氏和出生日期。我想检查数据库中是否已经存在具有相同属性的员工,如果不存在,则插入该员工 我正在使用以下代码: Entities entities; entities.AddToEmployee(emp); entities.SaveChanges(); 我的员工与另一个数据结构连接—销售。因此,我只需要将员工的主键添加到sales表中,而不是数据库中

我必须解决以下问题。 我收集了大量XML文件。在每个XML文件中都有不同的员工。我必须将唯一的员工添加到数据库中。在数据库中,每个员工都有名字、姓氏和出生日期。我想检查数据库中是否已经存在具有相同属性的员工,如果不存在,则插入该员工

我正在使用以下代码:

Entities entities;
entities.AddToEmployee(emp);
entities.SaveChanges();
我的员工与另一个数据结构连接—销售。因此,我只需要将员工的主键添加到sales表中,而不是数据库中的整个员工(如果它已经存在)


提前谢谢

在以下情况下,“查找或添加模式”非常有用:

var db = new YourContext();
var emp = db.Employees.Find(empID) ?? db.Employees.Add( new Employee { FirstName ="xx" , LastName="xxx"});
db.SaveChanges();

这样,如果emp对象存在于数据库中或已创建并保存到数据库中,则已加载emp对象。如果要搜索多个属性,可能需要将Find()替换为Where()。

在以下情况下,“查找或添加模式”可能很有用:

var db = new YourContext();
var emp = db.Employees.Find(empID) ?? db.Employees.Add( new Employee { FirstName ="xx" , LastName="xxx"});
db.SaveChanges();

这样,如果emp对象存在于数据库中或已创建并保存到数据库中,则已加载emp对象。如果要搜索多个属性,可能需要将Find()替换为Where()。

在实体框架中,可以通过多种方式创建和修改关系。 在您的情况下,我会首先搜索一名员工,如果它存在,我只会设置ForeingKey而不是像这样的导航属性

sale.EmployeeID = x; // id of existing employee
using(var dbContext = new MyContext())
{
//do persistence stuff
}
如果员工是新员工,则必须创建一个新员工对象,然后从sale对象引用该对象,然后保存它

如果收到“…附加到ObjectContext的对象无法添加到EntityCollection…”错误,请确保仅打开一个上下文。 我更喜欢这样包装我的所有数据库操作

sale.EmployeeID = x; // id of existing employee
using(var dbContext = new MyContext())
{
//do persistence stuff
}

在实体框架中,可以通过多种方式创建和修改关系。 在您的情况下,我会首先搜索一名员工,如果它存在,我只会设置ForeingKey而不是像这样的导航属性

sale.EmployeeID = x; // id of existing employee
using(var dbContext = new MyContext())
{
//do persistence stuff
}
如果员工是新员工,则必须创建一个新员工对象,然后从sale对象引用该对象,然后保存它

如果收到“…附加到ObjectContext的对象无法添加到EntityCollection…”错误,请确保仅打开一个上下文。 我更喜欢这样包装我的所有数据库操作

sale.EmployeeID = x; // id of existing employee
using(var dbContext = new MyContext())
{
//do persistence stuff
}

嗯,我有很大的树结构。当我添加基本元素(例如entities.AddToShop(shop))并保存更改后,所有数据都会进入数据库,所有员工都会保存在那里(不管他们是否已经存在)。我只想拯救那些独一无二的员工。嗯,我有一个很大的树形结构。当我添加基本元素(例如entities.AddToShop(shop))并保存更改后,所有数据都会进入数据库,所有员工都会保存在那里(不管他们是否已经存在)。我只想保存唯一的雇员。尝试了此操作,但出现以下错误:“无法将对象添加到EntityCollection或EntityReference。无法将附加到ObjectContext的对象添加到与源对象不关联的EntityCollection或EntityReference。”我认为这是一个涉及多个DBContext的问题。尝试使用单个dbcontext对象执行所有工作(我通常将代码块包装在using语句中)。尝试了此操作,但出现以下错误:“无法将对象添加到EntityCollection或EntityReference。无法将附加到ObjectContext的对象添加到与源对象不关联的EntityCollection或EntityReference。“我认为这是多个dbcontext的问题。请尝试使用单个dbcontext对象执行所有工作(我通常将代码块包装在using语句中)。