首页 > 解决方案 > 带有空值的 EF Core 复合主键

问题描述

只是想知道这是否可能:我有一个来自现有数据库的表,我无法修改。我只对查看数据感兴趣。我不会更新表格。

没有主键。有两个键在组合时会使行唯一。不幸的是,这两个列都允许并且具有空值。

我试过了:

 modelBuilder.Entity<IesHrEmployee>(entity => {
                entity.HasKey(o => new { o.PERS_NO, o.POS_NO });
                entity.ToTable("IES_HR_EMPLOYEES", "DBO");
            });

不幸的是在我的存储库中

public class IesHrEmployeesRepository : IIesHrEmployeesRepository
{
        private DataContext context;

        public IesHrEmployeesRepository(DataContext ctx) => context = ctx;

        public IEnumerable<IesHrEmployee> IesHrEmployees => context.IesHrEmployees.ToArray();
}

toArray通话中,我收到此错误:

Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
在 139.9397 毫秒内执行操作 UserNavigator.Controllers.IesHrController.Index (UserNavigator) 失败:
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]

执行请求时发生未处理的异常。System.Data.SqlTypes.SqlNullValueException:数据为空。不能对 Null 值调用此方法或属性。

在 System.Data.SqlClient.SqlBuffer.get_String()
在 System.Data.SqlClient.SqlDataReader.GetString(Int32 i)

标签: c#asp.net-core-mvcef-core-2.2

解决方案


不,您不能从可为空的列组成主键。但是,如果您只需要查询此表(没有插入或更新),您可以DbQuery<IesHrEmployee>在上下文中创建一个属性,而根本不需要键。


推荐阅读