c# - 带有空值的 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)
解决方案
不,您不能从可为空的列组成主键。但是,如果您只需要查询此表(没有插入或更新),您可以DbQuery<IesHrEmployee>
在上下文中创建一个属性,而根本不需要键。
推荐阅读
- audiokit - 一起使用 AKNodeOutputPlot 和 AKNodeRecorder 时崩溃
- informix - 如何从给定的日期时间获取一天结束
- python - 我从上一个问题中找到的用于连接 CSV 文件的细分代码?
- java - 想要在 App 中以编程方式删除文件
- php - Windows/temp 文件夹中的 Phpxxxx.tmp 文件没有被删除
- php - 在php中创建对象后如何调用数组中的函数?
- python - O(n) 时间内的滑动窗口最大值
- python - 在 argparse 中有没有办法完成第一个参数条目并重新启动应用程序
- git - 不小心创建了一个功能分支,并且已经在 Git 中处理了几个月,我如何在不丢失更改的情况下将其带回 master?
- python - 如何按功能块拆分 C 程序?