带空值的 EF Core 复合主键
EF Core composite primary key with nulls
只是想知道这是否可能:我有一个来自我无法修改的现有数据库的 table。我只对查看数据感兴趣。我不会更新 table.
没有主键。有两个键组合在一起会使行唯一。不幸的是,这两列都允许并具有空值。
我试过了:
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]
Executed action UserNavigator.Controllers.IesHrController.Index (UserNavigator) in 139.9397ms fail:
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
An unhandled exception has occurred while executing the request. System.Data.SqlTypes.SqlNullValueException: Data is Null. This method or property cannot be called on Null values.
at System.Data.SqlClient.SqlBuffer.get_String()
at System.Data.SqlClient.SqlDataReader.GetString(Int32 i)
不,您不能从可为空的列组成主键。但是,如果您只需要查询这个 table(没有插入或更新),您可以在上下文中创建一个 DbQuery<IesHrEmployee>
属性,根本不需要键。
只是想知道这是否可能:我有一个来自我无法修改的现有数据库的 table。我只对查看数据感兴趣。我不会更新 table.
没有主键。有两个键组合在一起会使行唯一。不幸的是,这两列都允许并具有空值。
我试过了:
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]
Executed action UserNavigator.Controllers.IesHrController.Index (UserNavigator) in 139.9397ms fail:
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]An unhandled exception has occurred while executing the request. System.Data.SqlTypes.SqlNullValueException: Data is Null. This method or property cannot be called on Null values.
at System.Data.SqlClient.SqlBuffer.get_String()
at System.Data.SqlClient.SqlDataReader.GetString(Int32 i)
不,您不能从可为空的列组成主键。但是,如果您只需要查询这个 table(没有插入或更新),您可以在上下文中创建一个 DbQuery<IesHrEmployee>
属性,根本不需要键。