我有一个EF模型,它具有以下属性:

public Uri? LinkedIn { get; set; }

在我的IEntityTypeConfiguration.Configuration.Configuration.Configure我有:

builder.Property(e => e.LinkedIn).HasConversion(v => v.ToString(), v => new Uri(v));

我收到一条警告,v.ToString()中的v可能为空.但如果我将其更改为:

builder.Property(e => e.LinkedIn).HasConversion(v => v?.ToString(), v => new Uri(v));

我收到一个错误,说我不能在lambda操作符中进行空判断.我试过使用单元格、显式判断等方法,但都不满意.

现在我可以这么做了吗?这是在EntiyFrameworkCore中,但我认为这与这个问题无关.

推荐答案

由于源类型可为空(Uri?),目标类型也应为空(string?),因此转换应解析为HasConversion<Uri?, string?>.

换句话说,这两个表达式都应该接受可为空的类型参数并返回可为空的类型结果.在你的情况下

.Property(e => e.LinkedIn)
.HasConversion(
    v => v != null ? v.ToString() : null,
    v => v != null ? new Uri(v) : null);

这消除了启用了NRT的EF Core 7.0项目中的警告.如果您仍然收到警告,您可能正在使用较旧的EF Core版本,其中并不是所有的API都正确地进行了NRT注释.

Csharp相关问答推荐

Microsoft.AspNetCore.Mvc. Controller Base.用户:属性或索引器Controller Base.用户无法分配给--它是只读的

我可以 suppress 规则CS 9035一次吗?

react 式扩展连接中的非交叉LeftDurationTimeout

如何使用CsvReader获取给定列索引的列标题?

始终保留数组中的最后N个值,丢弃最老的

HttpConext.Request.Path和HttpConext.GetEndpoint()之间的差异

mocking对象的引发事件并作为用于调用方法的参数对象传递到那里

MS Graph v5.42.0:在寻呼消息时更改页面大小

如何使用C#中的主构造函数功能使用多个构造函数?

如果设置了另一个属性,则Newtonsoft JSON忽略属性

如何将MemberInitExpression添加到绑定中其他Lambda MemberInitExpression

DbContext-传递自定义配置选项

基于C#和ANGING的SignalR实时聊天流媒体应用

链接到字典字符串.拆分为(.Key,.Value)

.NET 8在appsettings.json中核心使用词典URI、URI&>

是否可以从IQueryable T中获取一个IdentyEntry T>

VS代码扩展无法在新版本扩展C#中运行从v2.10.28开始

在使用.NET EF Core DbContext属性之前,是否应使用null判断

如何将行添加到DataGrid以立即显示它?

使用生产环境调试我的应用程序的快速方法