问题标签 [newsequentialid]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
entity-framework-5 - 当 ID 是带有 newsequentialid() 的 Guid 时,使用 Entity Framework 5.0 映射父子关系
我有两个具有一对多关系的类。
映射类是:
我可以创建客户端类的新实例并将它们成功保存到数据库中。但是,当我尝试添加 Client_Local 类并将其保存到数据库时,我得到“ReferentialConstraint 中的依赖属性映射到存储生成的列。列:'Guid'。”。
出于性能原因,关键字段在 sql 中生成为 newsequentialid。并且Client_Local.Guid和Client.Guid之间存在外键关系。
从数据库中检索数据使用上述映射类。任何帮助将不胜感激。
sql - newid() 与实体框架 6 代码优先
我想通过 Entity Framework 6 Code First 使用 newid() 设置 SQL 数据库中表的主键的默认值。我知道这是如何通过代码完成的,并且还在 stackoverflow 上找到了一些方法,例如How to set NewId() for GUID in entity framework
但是:我有一个备份/恢复机制,它不是通过对象插入数据,而是作为数据库的一个凸起插入数据。所以这里没有使用实体框架。这意味着将在 SQL 数据库中插入以 null 作为 guid 的行并失败。
可以添加注释
这将成功添加 NEWSEQUENTIALID() 作为默认值,它与 newid() 执行类似的操作(它添加了一个高于最近 guid 的新 guid,因此您赢得了性能,因为您在输入中有订单)。但是因为这是一个已经存在而没有 EF 的数据库,所以我想尽可能少地进行更改。所以我对 NEWSEQUENTIALID() 并不十分满意。如果它仍然只是 newid(),我宁愿喜欢它。但是我在 Entity Framework 6 Code First 中没有找到 newid() 的任何注释/映射。根据设计,对数据库的所有更改都必须通过代码完成。有谁知道如何通过代码将默认值 newid() 添加到行中?
提前致谢!
sql-server - 为什么使用 NEWID() 比 NEWSEQUENTIALID() 使用更多空间?
我正在做一些研究,我遇到了一个我无法解释的异常情况(而且我在谷歌上找不到任何东西)。考虑以下 SQL:
结果:
问题
谁能解释为什么在使用 NEWSEQUENTIALID() 而不是 NEWID() 时保留/实际空间要小得多?
作为回应
我进行了以下测试以检查 Luaan 在下面给出的答案:
不同之处在于我删除了主键(这意味着该表现在是一个堆表)。现在这导致两个表的大小完全相同。这证明了该表是由其聚集索引物理组织的。
sql - NEWSEQUENTIALID 的可预测性如何?
根据微软关于 的文档NEWSEQUENTIALID
,NEWSEQUENTIALID 的输出是可以预测的。但是可预测性如何?假设我有一个由 生成的 GUID,NEWSEQUENTIALID
它有多难:
- 计算下一个值?
- 计算前一个值?
- 计算第一个值?
- 计算第一个值,即使根本不知道任何 GUID?
- 计算行数?例如,当使用整数时,
/order?id=842
告诉我应用程序中有 842 个订单。
下面是一些关于我在做什么以及各种权衡是什么的背景信息。
使用 GUID 而非整数作为主键的安全优势之一是 GUID 很难猜测。例如,黑客看到一个/user?id=845
他可能会尝试访问的 URL /user?id=0
,因为数据库中的第一个用户很可能是管理用户。此外,黑客可以迭代/user?id=0..1..2
以快速收集所有用户。
同样,整数的隐私缺点是它们会泄露信息。/order?id=482
告诉我,该网店自实施以来已收到 482 个订单。
不幸的是,使用 GUID 作为主键具有众所周知的性能缺点。为此,SQL Server 引入了该NEWSEQUENTIALID
功能。在这个问题中,我想了解输出的可预测性NEWSEQUENTIALID
。
newsequentialid - 表已创建并有数据后如何使用 NEWSEQUENTIALID()?
任何人都可以帮我解决这个问题。我有一张不唯一的表(因为我正在翻阅我前任的旧数据库。)
我想将它分配给我拥有的 Fruits 表中的“ID”字段。
我想继续设置 NEWSEQUENTIALID(),这样我就可以看到我正在使用的所有内容。
sql-server - 在 SQL Server 的多对多关系中使用顺序 GUID
基于“什么是使用 GUID 作为主键的最佳实践,特别是关于性能? ”问题,恕我直言,如果您使用顺序 GUID 作为具有非聚集索引的 PK 并使用INT
orBIG INT IDENTITY
作为聚集索引并考虑到应用程序可能稍后需要复制,这将是有益的,并且不会在表扫描、内部连接和插入中损失太多性能。
但是可能对许多关系呢?我们是否还应该为其桥接表使用不同的(INT
或BIGINT
)聚集索引来获得与带有 FK 的桥接表相同的性能BIGINT
?
c# - Guid 为空,首先使用 newsequentialid() 和 EF 数据库
我首先在使用 EF 4.1 和数据库的网站上工作。我也在使用 aspnet 表,特别aspnet_Users
是使用 Guid 作为主键的表。aspnet_Users
因此,我的自定义 User 表也有一个 Guid 作为主键,它是id的外键。
最近,我读到使用 Guid 作为主键是一个坏主意,除非使用newsequentialid()
.
使用 Sql Server Management Studio,我已将所有主键的默认值更新为newsequentialid()
,并在我的 edmx 设计器中设置StoreGeneratedPattern
为。Identity
但是,每当我尝试添加一个对象(例如Item
,它有一个 Guid 主键)时,它的 id 在数据库中保持为空(全为 0)。
和添加方法:
我是不是忘记了什么?尽管我为数据库的主键设置了默认值,但它们Default Value
在 edmx 设计器中的属性仍然是None
. 正常吗?
另一种解决方案是使用 int 而不是 Guid 作为主键,但是我怎样才能在我的自定义 User 表和aspnet_Users
使用 Guid 之间建立链接?
非常感谢 !
c# - 如何在 C# 中对顺序 GUID 进行排序?
顺序 GUID 是唯一的,但是是按顺序创建的;该顺序有点不寻常,并且与使用标准 .NET Guid 比较器时获得的顺序不同。
我正在寻找一个 C# Guid 比较器,它将按顺序 GUID 的规则进行排序。
== 更新==
我特别指的是 SQL Server 中由 NewSequentialId() 创建的顺序 GUID,尽管我现在意识到标准 Win32 API 调用 UuidCreateSequential() 使用与 SQL Server 不同的方案(我在写问题时假设它们是相同的) .
== 更新 2==
petelids给出了下面的答案,使用例如 List<System.Data.SqlGuid>.Sort() 给出以下序列(使用每个 4 位位置为 1 的 GUID 的初始列表)...
与 List<System.Guid>.Sort() 返回的以下顺序相反
sql-server - 由于 Newsequentialid 导致的 SQL 新列错误
嗨,我有一个非常大的数据,它有一个作为 ObjectID 的列,它的默认值是 newsequentialid()。当我尝试在该表上创建具有默认值的新列时,我收到此消息“验证列 'ObjectID' 的默认值时出错”。
如果我对该对话消息说“是”,会发生什么?我不想影响我们现有的数据。
你能解释一下这种情况吗?
感谢和问候
sql-server - 跨服务器的集群 GUID 列和 newsequentialid
众所周知,在具有聚集索引的列中使用随机值并不是一个好主意,这就是为什么通常不建议将 GUID 用于具有聚集索引的主键的原因。使用 newsequentialid() 函数,我们可以克服大部分困难。
但是,如果您在 Web 服务器场上生成 GUID,所有这些都访问同一个数据库,会发生什么情况?我正在使用 UuidCreateSequential 在 .NET 代码中创建顺序 ID,如本文所述:http: //blogs.msdn.com/b/dbrowne/archive/2012/07/03/how-to-generate-sequential-guids-for -sql-server-in-net.aspx
问题是,虽然生成的 GUID 从单台机器上是连续的,但在多台机器上却不是这样。因为最重要的 11 个字节(根据 SQL Server)似乎对于同一台机器几乎保持不变,所以它有效地按机器排序,然后按时间排序,而不是期望的相反。
重新排序 GUID 中的字节以在机器之间获得近乎顺序的 GUID 是否值得且可行,还是我应该放弃并使索引不聚集?
谢谢!