ASP.NET核心的默认实现使用public class InputStreamJsonArrayStreamDataSupplier<T> implements Supplier<Stream<T>> {
private ObjectMapper mapper = new ObjectMapper();
private JsonParser jsonParser;
private Class<T> type;
public InputStreamJsonArrayStreamDataSupplier(Class<T> type) throws IOException {
this.type = type;
// Setup and get into a state to start iterating
jsonParser = mapper.getFactory().createParser(data);
jsonParser.setCodec(mapper);
JsonToken token = jsonParser.nextToken();
if (JsonToken.START_ARRAY.equals(token)) {
// if it is started with START_ARRAY it's ok
token = jsonParser.nextToken();
}
if (!JsonToken.START_OBJECT.equals(token)) {
throw new RuntimeException("Can't get any JSON object from input " + data);
}
}
public Stream<T> get() {
try {
return StreamSupport.stream(Spliterators.spliteratorUnknownSize((Iterator<T>) jsonParser.readValuesAs(type), 0), false);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
作为用户和角色表的主键。
我关注的是,在数据库设计期间,开发人员通常需要将实体与用户ID链接为外键,例如在审核时添加Guid
和ModifiedBy
列,在这种情况下,在执行CreatedBy
和其他类型的查询时,外键将是nvarchar(450)
,与int
主键相比效率很低。
我知道我可以将身份核心配置为使用自定义主键类型,例如JOIN
,但是出于安全考虑(我不是安全专家),我应该坚持使用默认配置吗?
与int
外键相比,字符串外键上的JOIN
也不是非常慢(添加到主键为int
的混合使得这甚至更糟)?
P.S:我不是在ASP.NET核心的上下文之外首先使用代码或EF;
答案 0 :(得分:4)
实际上,默认的PK类型是string
。它只是看起来像<{1}} 。无论如何,PK本身就是一个索引列,因此实际上它的类型非常无关紧要。使用你喜欢的任何类型都没有安全问题,所以如果你喜欢整数,请使用整数。或者,您实际上也可以使用真正的Guid
。在这种情况下,您最终会在数据库中找到uniqueidentifier列。无论长短,它主要只是您个人的偏好。不过,我确实倾向于使用整数。