2017-10-06 63 views
0

在我正在处理的应用程序中,我存储基本上包含一些任意(用户定义的)文本及其创建时间的“注释”。时间非常重要,这些注释在按时间排序时需要准确排序。现在,当插入注释时,时间由SQL数据库本身分配,并且一次插入一个注释效果良好。随着时间戳增加的SQL插入顺序列表

但是,新的要求已经导致能够创建多个笔记并在单个请求中提交它们。当稍后从数据库中检索这些备注时,按时间排序应该导致请求中提供的原始排序。我担心的是,通常插入清单不能保证单个元素的顺序,或者根本不能保证不同的时间。

有一个简单的解决方案,就是简单地使用单独的事务按顺序插入每个笔记。从我对SQL的理解中可以看出,与进行单一事务相比,这会对性能产生重大影响,所以如果替代方案合理,我想避免这种情况。

有关更多背景信息,应用程序用C#编写,并使用实体框架与数据库定义的Code First进行通信。 Notes在ASP.NET MVC客户端中创建,然后发送到处理数据库访问的ASP.NET Web API服务器。据我所知,它没有使用.NET Core。

+1

可能是一个愚蠢的答案,但你不能发送笔记和他们在应用程序中创建的时间到数据库插入表中? –

+0

当你说时间戳时,我假设你的意思是一个具有该名称的日期时间数据类型? timestamp是sql server中的一个数据类型,与时间或日期无关。 –

+0

有人可能会问,如果两张纸币同时插入,您如何知道哪张纸币是先创建的? –

回答

0

当你说时间戳是由数据库创建的,你的意思是该列有一个默认值SYSDATETIME()?如果是这样,您可以通过在创建注释时在代码中设置日期属性来覆盖该属性。这样,您可以在保存单笔交易的同时保留按时间顺序。

+1

这是一条评论....不是答案。 –

+0

我们使用'System.ComponentModel.DataAnnotations'中定义的'DatabaseGeneratedAttribute'。根据我的经验,插入时忽略属性中包含该属性的任何信息,但我会尝试查看是否有误。 –

0

Notes实体只需要一个NoteId标识列。 SQL Server保证以行的顺序分配标识值,即使在单个语句中插入多行时也是如此。然后,您可以通过NoteId订购注释以通过广告订单检索它们。

+0

按照创建时间进行显式排序时,注释的顺序必须正确。我会更新这个问题来澄清这一点。 –

+0

这是一个奇怪的要求。要做到这一点,您需要在创建时间中添加一个唯一索引,并确保您不会同时安装多行。您可以使用datetime2(7)具有足够的时间精度来完成此工作,但插入多行时需要手动分配增量时间值。 –