实体框架,根据具体情况插入对象

时间:2012-05-19 08:45:02

标签: c# sql-server entity-framework

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

我正在使用以下代码:

Entities entities;
entities.AddToEmployee(emp);
entities.SaveChanges();

我的员工与其他数据结构相关联 - 销售。所以我只需要将员工的主键添加到sales表中,而不是添加到数据库中的整个员工(如果它已经存在)。

提前致谢!

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

sale.EmployeeID = x; // id of existing employee

如果员工是新员工,您必须创建一个新的员工对象,然后从销售对象中引用它,然后保存。

如果您正在接收“...附加到ObjectContext的对象无法添加到EntityCollection ...”错误,请确保您只打开了一个上下文。 我更愿意像我这样包装所有的数据库操作

using(var dbContext = new MyContext())
{
//do persistence stuff
}
相关问题