ef-fluent-api - 具有 Nullable 引用类型的 .Net Core Fluent API
问题描述
我似乎无法解决以下问题,并且在网上找不到任何有帮助的东西。我是 .Net Core 的新手,对使用可为空的引用类型也很陌生,但不知何故,我无法让它们与 EF Core 一起工作。我有一个包含一对多关系的数据表,其中外键可以为空(即关系中可能没有项目-在本例中并非所有资产都有资产类型)。曾经工作的流畅 API 是
modelBuilder.Entity<Asset>(entity =>
{
entity.HasOne(d => d.AssetType)
.WithMany(p => p.Assets)
.HasForeignKey(d => d.AssetTypeId)
.HasConstraintName("FK_Assets_AssetTypes");}
问题出在 AssetType? 可以为空我现在得到一个
'p' 在这里可能为空...关于 p.Assets 的警告
并且除了压制消息并希望它有效之外似乎无法找到解决方法,尽管其他多对多关系没有并且需要手动处理,但这似乎是可行的。除非我做错了,否则 EFCore 在多对多上似乎非常原始。
我尝试通过从 AssetType 实体开始来反转关系,但我得到了类似的结果。
我也尝试过使用
.WithMany()
但这会删除现有的导航属性,因此它不起作用。
任何帮助将不胜感激,因为我显然遗漏了一些东西。
解决方案
我刚刚在配置映射表达式时遇到了类似的情况。最后,我决定让警告静音,因为所写的表达式永远不会执行。它仅由 EF 解析以执行其内部魔术。在您的情况下,它将是这样的(无需处理#pragma warning disable
)
modelBuilder.Entity<Asset>(entity =>
{
entity.HasOne(d => d.AssetType)
.WithMany(p => p.Assets!)
// ^ this '!' tells to compiler to stop bothering you about this
// null dereference because you are sure the code is right
.HasForeignKey(d => d.AssetTypeId)
.HasConstraintName("FK_Assets_AssetTypes");
}
推荐阅读
- forms - 提交密码的正确方法
- java - 使用 MapStruct 列出两个不同 bean 的映射
- python - 难以模糊python图像
- matlab - 如何让Matlab自动按顺序输入文件?
- amazon-web-services - Sagemaker Studio 每次连接“打开工作室”时都会错误加载屏幕以清除工作区
- multithreading - 如何测试该方法等待异步调用完成
- reactjs - 使用useEffect在react中设置本地存储后如何在渲染中将数据填充到购物车中
- javascript - Ionic 中的多个构造函数打字稿:怎么做?
- go - 使用 Go 语法的函数组合
- image - React Native:模态屏幕未通过点击关闭