带空值的EF Core复合主键

时间:2019-08-20 18:56:55

标签: c# asp.net-core-mvc ef-core-2.2

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

没有主键。有两个键可以使行唯一。不幸的是,这两个列都允许并且具有空值。

我尝试过:

 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。不能在Null值上调用此方法或属性。

     

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

1 个答案:

答案 0 :(得分:5)

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