2011-12-16 9 views
11

Pracuję w projekcie używającym EF 4.0.Wiele dodanych jednostek może mieć ten sam klucz podstawowy w Entity Framework

Tabela zawiera kolumnę ReferEmployeeID, która zawiera identyfikator pracownika pracownika, który odsyła nowego pracownika do systemu. Tak więc Employee jest tabelą samo-odwołującą się.

Teraz w przypadku pracownika, który nie jest dodany do systemu, ma dodać, a on również odnosi się do innego pracownika w systemie, wiersz powinien zostać dodany w całości.

ActualEmployee Nie zapisuj jeszcze nazywa, a następnie ReferEmployee.Employee = ActualEmployee

Rozumiem, że problemem jest to, że zarówno pracownicy rzeczywisty i odnoszą się Employee ID ustawiony na 0, ale jak się wokół tego problemu.

Odpowiedz

18

Zakładając, że EmployeeID w tabeli bazy danych jest zdefiniowany jako INT IDENTITY, to można to zrobić:

// create two new employees - one refers to the other 
Employee john = new Employee { EmployeeID = -1, EmpName = "John" }; 
Employee peter = new Employee { EmployeeID = -2, EmpName = "Peter", ReferEmployeeID = -1 }; 

// add them to the EF model 
ctx.AddToEmployees(john); 
ctx.AddToEmployees(peter); 

// save changes 
ctx.SaveChanges(); 

Więc zasadniczo zdefiniować nowych pracowników z „manekina” EmployeeID wartości i ustanowić połączenie (Peter referencje John tutaj, za pomocą jego "dummy" ID).

Podczas zapisywania tego w SQL Server, Entity Framework będzie obsługiwać proces uzyskiwania prawdziweEmployeeID wartości (które SQL Server ręce podczas wstawiania wiersza) i EF będzie utrzymać ten związek pomiędzy dwoma pracownikami.

+1

Szukałem tej odpowiedzi przez około dwie godziny. Nigdy nie wiedziałem, że EF działa w ten sposób (używając fałszywych tożsamości). Czy to jest udokumentowane lub omówione w dowolnym miejscu? Dzięki! – Mike

+0

@Mike: nie jestem pewien - podniosłem go gdzieś wzdłuż linii, czytając książki, blogi i filmy wideo autorstwa Julie Lerman i zespołu EF –

Powiązane problemy