【发布时间】:2021-08-14 00:43:39
【问题描述】:
我在从数据库中检索任何具有空字符串值的记录时遇到问题。我正在使用 SQL Server 2012、.NET 5.0。
我的模型课:
public class Project
{
public int ProjectId { get; set; }
[StringLength(50)]
public string ProjectSaleTypeId { get; set; }
[JsonIgnore]
public ProjectSaleType ProjectSaleType { get; set; }
}
public class ProjectSaleType
{
[StringLength(50)]
public string ProjectSaleTypeId { get; set; }
[JsonIgnore]
public ICollection<Project> Projects { get; set; }
}
然后当我请求获取id为365的实体时:
_context.Projects.FirstOrDefault(x => x.ProjectId == 365);
出现以下错误:
System.InvalidOperationException: '读取属性 'Project.ProjectSaleTypeId' 的数据库值时发生错误。预期类型为“System.String”,但实际值为 null。'
需要注意的是,具有ProjectSaleTypeId 的实体工作正常。
我了解 C# 8.0 引入了可为空的引用类型。但是我没有在我的项目中启用这些; https://docs.microsoft.com/en-us/ef/core/miscellaneous/nullable-reference-types
为什么在检索 ProjectSaleTypeId 等于 null 的实体时会出现此错误?
【问题讨论】:
-
您的映射是如何完成的?任何添加的约定?
-
我没有在
OnModelCreating期间使用模型构建器为Project配置映射 -
ProjectSaleTypeId是fk吗? -
是的,
ProjectSaleTypeId是一个可以为空的外键。 -
你试过在
OnModelCreating中强制它吗?modelBuilder.Entity<Project>().Property(m => m.ProjectSaleTypeId).IsOptional();
标签: c# entity-framework entity-framework-core