1

我有兩個表:一次插入兩條記錄到兩個表中,其中一個表使用另一個作爲外鍵?

  • Employee:EMPID(PK),EmpName。
  • EmployeeDetails:ID(自動遞增),EMPID(FK到Employee表),地址,郵編。

我使用實體框架6.

當我想插入一個新Employee,我必須做兩筆交易,這意味着使用SaveChanges()兩次,以便插入一個新員工,然後才使用它Id作爲EmployeeDetails中的外鍵。

是是可以做到的,在一個交易?

感謝

+0

是員工內部的「細節」嗎?如果是這樣,你可以做employee.EmployeeDetails = empDetails。然後調用SaveChanges。 EntityFramework將負責其餘部分。讓我們看看你的類/映射 – jpgrassi

+0

@jpgrassi:不,他們與外國鍵,'的Id'連接兩地分居類'Employee'是的''EmployeeDetails外鍵 – ron

回答

1

可以容易在一個單一的步驟做:

using (YourDbContext ctx = new YourDbContext()) 
{ 
    Employee emp = new Employee(); 
    // set the values for "emp" 

    emp.EmployeeDetail = new EmployeeDetails(); 
    // set the employee details 

    ctx.SaveChanges(); 
} 

如果創建EmployeeDetails作爲Employee的一部分,你可以只保存Employee單獨 - 與EF會商店實體(作爲一個「實體圖形」)並已正確設置它們之間的FK約束 - 都在一個單一步驟

+0

你是什麼意思「的員工的一部分「?它們是兩個用外鍵連接的獨立類,Employee的Id是EmployeeDetails的外鍵。 – ron

+0

好吧,如果表是在數據庫級別上連接,然後'Employee'你的C#類*最有可能*擁有了'EmployeeDetails'屬於該僱員*導航屬性* –

0

你應該修改你的模型。詳細信息是員工的「部分」。如果以這種方式創建的實體,當你插入一個僱員,實體框架將負責其餘的你:

員工

public class Employee 
{ 
    public int EmpId { get; set; } 

    public string EmpName { get; set; } 

    public EmployeeDetails EmployeeDetails { get; set; } 
} 

詳細

public class EmployeeDetails 
{ 
    public int Id { get; set; } 
} 

比你可以這樣做:

using (dbContext context = new dbContext()) 
{ 
    Employee emp = new Employee(); 

    emp.EmpName = "John"; 
    emp.EmployeeDetails = new EmployeeDetails 
    { 
     //details fields 
    }; 

    context.SaveChanges(); 
} 
相關問題