EF Core一对多(带可选主键)

时间:2019-04-03 07:51:48

标签: c# entity-framework-core

我正在尝试让EF Core 2在没有指定外键的现有数据库上工作,并且“外键”和主键的键可以为空。

Foo上使用此属性映射:

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

在主键和外键类型均为int?的情况下,因为UserUser.SID都允许为null

这里比较奇怪的是,当然可以允许User.SIDnull,但不幸的是,我没有纠正它的选择。

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 })

但是我宁愿避免那样。

0 个答案:

没有答案