我正在尝试让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。不能在Null值上调用此方法或属性。
InvalidOperationException:读取属性'User.Id'的数据库值时发生异常。预期的类型为'System.Nullable`1 [System.Int32]',但实际值为null。
可以指定此映射吗?
我可以通过忽略User
属性并在IQueryable
上进行手动联接来做到这一点:
_dbContext.Foo
.Join(_db.Users,
kf => kf.UserId,
u => u.SID,
(foo, user) => new Foo { User = user })
但是我宁愿避免那样。