ASP.NET核心身份主要关键性能问题

时间:2018-01-25 15:35:33

标签: asp.net-core .net-core asp.net-identity entity-framework-core

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链接为外键,例如在审核时添加GuidModifiedBy列,在这种情况下,在执行CreatedBy和其他类型的查询时,外键将是nvarchar(450),与int主键相比效率很低。

我知道我可以将身份核心配置为使用自定义主键类型,例如JOIN,但是出于安全考虑(我不是安全专家),我应该坚持使用默认配置吗?

int外键相比,字符串外键上的JOIN也不是非常慢(添加到主键为int的混合使得这甚至更糟)?

P.S:我不是在ASP.NET核心的上下文之外首先使用代码或EF;

1 个答案:

答案 0 :(得分:4)

实际上,默认的PK类型是string。它只是看起来像<{1}} 。无论如何,PK本身就是一个索引列,因此实际上它的类型非常无关紧要。使用你喜欢的任何类型都没有安全问题,所以如果你喜欢整数,请使用整数。或者,您实际上也可以使用真正的Guid。在这种情况下,您最终会在数据库中找到uniqueidentifier列。无论长短,它主要只是您个人的偏好。不过,我确实倾向于使用整数。