Работа по вашему требованию будет создавать отношения «один-два» с независимой ассоциацией.
public class User // Principal
{
public int UserID { get; set; } // PK
public virtual Employee Employee { get; set; }
}
public class Employee // Dependent
{
public int EmployeeID { get; set; } // PK
// public int UserID {get; set; } // remove to create independent association
public virtual User User { get; set; }
}
Config
modelBuilder.Entity<User>()
.HasOptional(u => u.Employee)
.WithOptionalPrincipal(e => e.User);
Сформированная база данных будет создавать один ко многим отношений. Пользователь становится Принципалом, а Сотрудник становится зависимым, но у Работника может быть факультативный Принципал.
using (var db = new AppContext())
{
// User can have optional Employee.
db.Users.Add(new User { UserID = 1, Employee = null });
db.SaveChanges();
}
using (var db = new AppContext())
{
// Employee can have optional User.
db.Employees.Add(new Employee { EmployeeID = 1, User = null });
db.Employees.Add(new Employee { EmployeeID = 2, User = null });
db.SaveChanges();
}
User Employee
------ ----------------------
UserID EmployeeID User_UserID
1 1 null
2 null
Связанный сотрудник (1) с пользователем (1).
using (var db = new AppContext())
{
var employee = db.Employees.Find(1);
employee.User = db.Users.Find(1);
db.SaveChanges();
}
User Employee
------ ----------------------
UserID EmployeeID User_UserID
1 1 1
2 null
Связанный сотрудник (2) с пользователем (1).
using (var db = new AppContext())
{
var employee = db.Employees.Find(2);
employee.User = db.Users.Find(1);
db.SaveChanges();
}
User Employee
------ ----------------------
UserID EmployeeID User_UserID
1 1 null
2 1
Конечно, если мы вручную изменим его из базы данных, он будет работать, но при его исполнении может возникнуть непредвиденное поведение.
update Employees set User_UserId = 1
Я думаю, что нет факультативного отношения к факультативным отношениям, у Принципала может быть опция Dependent, но Dependent требует наличия существующего Принципала для ссылки. Если это не отношение к многим, где зависимый может иметь факультативный Принципал. Но в отношениях один к одному или нолю, я боюсь, что таких отношений (opt to opt) не существует. –
любой другой способ обойти его? –