EF 4.1 маппинг один на один - PullRequest
       0

EF 4.1 маппинг один на один

0 голосов
/ 05 октября 2011

У меня есть две таблицы сотрудников и должности.

Employee

EmployeeId (PK)

PositionId (FK, Nullable)

Position

PositionId (PK)

Позиция может быть создана и не может быть назначена.Однако активному сотруднику требуется должность.Должность может быть назначена только одному сотруднику.Мы реализуем это, имея уникальное ограничение на Employee.PositionId.

В моих моделях я хочу иметь свойство Employee в Position и у меня возникают проблемы при сопоставлении этого.

Я пробовал

modelBuilder.Entity<Employee>().HasRequired(e => e.Position)
                               .WithOptional(p => p.Employee);

Однако в результате получается сопоставление столбца Employee.EmployeeId с Position.PositionId вместо Employee.PositionId с Position.PositionId (по крайней мере из того, что я могу сказать ...)

Является ли мой единственный вариант сопоставить это как отношение «один ко многим», хотя я заставляю 1-1 преодолевать уникальные ограничения?

1 Ответ

1 голос
/ 05 октября 2011

Цитирование из: http://weblogs.asp.net/manavi/archive/2011/01/23/associations-in-ef-code-first-ctp5-part-3-one-to-one-foreign-key-associations.aspx

Code First (и EF в целом) изначально не поддерживают однозначные ассоциации внешних ключей. Фактически, EF не поддерживает сценарий любой ассоциации, который включает в себя уникальные ограничения.

В свободном API:

modelBuilder.Entity<Employee>()
            .HasRequired(e => e.Position)
            .WithMany()
            .HasForeignKey(e => e.PositionId);

Затем переопределите метод Seed:

protected override void Seed(EntityMappingContext context)
{
context.Database.SqlCommand("ALTER TABLE Employees ADD CONSTRAINT uc_Position UNIQUE(PositionId)");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...