我必须遵循问题。 我有大量的XML文件。在每个XML文件中都有不同的员工。我必须将唯一的员工添加到数据库中。在数据库中,每个员工都有名字,姓氏和出生日期。我想检查数据库中是否已存在具有相同属性的员工,以及是否不插入该员工。
我正在使用以下代码:
Entities entities;
entities.AddToEmployee(emp);
entities.SaveChanges();
我的员工与其他数据结构相关联 - 销售。所以我只需要将员工的主键添加到sales表中,而不是添加到数据库中的整个员工(如果它已经存在)。
提前致谢!
答案 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
}