EF Core - уникальное ограничение, включая свойство навигации, не обнаруженное при миграции - PullRequest
1 голос
/ 09 июня 2019

Я пытаюсь применить уникальное составное ограничение, одна из частей ограничения - внешний ключ.Единственный способ заставить его работать, это явно определить внешний ключ в моем доменном классе, которого я хочу избежать.Возможно ли это?

Проблема и обходной путь применяются как к HasAlternateKey, так и к HasIndex.Решение строится нормально, но при создании миграции это ограничение игнорируется до тех пор, пока свойство shadow не станет реальным свойством в классе домена.

Это НЕ работает (миграция игнорирует это):

entity.HasAlternateKey(e => new { e.Header.Id, e.Version, e.StartDate });

Это работает ПОСЛЕ превращения свойства тени HeaderID в реальное:

entity.HasAlternateKey(e => new { e.HeaderId, e.Version, e.StartDate });
entity.HasOne(e => e.Header).WithMany().HasForeignKey(f => f.HeaderId);

1 Ответ

2 голосов
/ 10 июня 2019

Fluent API не поддерживает выражения вложенных свойств, такие как e.Header.Id.

Как обычно со свойствами теней, вы должны ссылаться на них по name , используя string перегрузки соответствующихсвободный API.

В вашем случае:

entity.HasAlternateKey("HeaderId", "Version", "StartDate");
entity.HasOne(e => e.Header).WithMany().HasForeignKey("HeaderId");
...