EF Core One-To-Many с необязательным основным ключом - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь заставить EF Core 2 работать с существующей базой данных, в которой не указаны внешние ключи, а "внешние ключи" и ключи основных ключей могут быть нулевыми.

Использование сопоставления этого свойства для Foo:

e.HasOne(x => x.User)
 .WithMany()
 .HasPrincipalKey(x => x.SID)
 .HasForeignKey(x => x.UserId);

Где и главный ключ, и тип внешнего ключа - int?, поскольку User и User.SID могут иметь значение null.

Самое странное здесь, конечно, то, что User.SID может быть null, но, к сожалению, у меня нет возможности исправить это.

EF возвращает это исключение при запросе к коллекции:

SqlNullValueException: данные равны нулю. Этот метод или свойство нельзя вызывать для значений Null.

InvalidOperationException: исключение произошло при чтении значения базы данных для свойства 'User.Id'. Ожидаемый тип был «System.Nullable`1 [System.Int32]», но фактическое значение было нулевым.

Есть ли способ указать это отображение?

Я могу сделать это, проигнорировав свойство User и выполнив ручное соединение на IQueryable, например:

_dbContext.Foo
          .Join(_db.Users,
                kf => kf.UserId,
                u => u.SID, 
                (foo, user) => new Foo { User = user })

Но я бы предпочел этого избежать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...