-
Notifications
You must be signed in to change notification settings - Fork 0
OneToOne
Marcin Sulecki edited this page Apr 4, 2017
·
8 revisions
public class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
public EmployeePhoto Photo { get; set; }
}
public class EmployeePhoto
{
public int EmployeeId { get; set; }
public byte[] Photo { get; set; }
public string Caption { get; set; }
public Employee PhotoOf { get; set; }
}
Trudno jest określić, która encja jest zależna od której więc nie jest możliwe utworzenie domyślnej konwencji. Trzeba użyć konfiguracji.
Konfiguracja
modelBuilder.Entity<EmployeePhoto>()
.HasKey(p=>p.EmployeeId)
.HasRequired(p => p.PhotoOf)
.WithOptional(p => p.Photo);
Struktura bazy danych
Pracownik nie może zostać usunięty jeśli istnieje zdjęcie.
Dodanie zdjęcia do bazy danych
var filename = @"marcin.jpg";
var photo = File.ReadAllBytes(filename);
var employee = new Employee
{
Name = "Marcin",
Photo = new EmployeePhoto
{
Caption = "Zdjęcie",
Photo = photo,
},
};
using (var context = new MyContext())
{
context.Employees.Add(employee);
context.SaveChanges();
}
Jeśli chcemy usunąć wraz pracownikiem powiązane zdjęcie to możemy ustawić kaskadowe usuwanie za pomocą WillCascadeOnDelete
modelBuilder.Entity<EmployeePhoto>()
.HasKey(p=>p.EmployeeId)
.HasRequired(p => p.PhotoOf)
.WithOptional(p => p.Photo)
.WillCascadeOnDelete(true);
Przykład ustawienia zdjęcia jako encji nadrzędnej
modelBuilder.Entity<EmployeePhoto>()
.HasKey(p=>p.EmployeeId)
.HasRequired(p => p.PhotoOf)
.WithRequiredPrincipal(p => p.Photo)
.WillCascadeOnDelete(true);