Я пытаюсь заставить 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 })
Но я бы предпочел этого избежать.