考虑这样的实体:
public class Document
{
public int Id { get; set; }
public long code { get; set; }
// Rest of Props
}
我需要的是生成一个唯一的长代码,我更喜欢根据Id生成它。
一个简单的经典但不安全的解决方案是获取最后一个Id并将其增加一个并使用,但我正在寻找更好的解决方案,例如计算列,或任何其他方式将代码生成分配给数据库。 / p>
到目前为止,我正试图在交易的帮助下做出前经典解决方案,以确保安全。
有什么更好的建议吗?
答案 0 :(得分:1)
每个表限制单个标识字段的解决方法只是将Documents
表规范化为包含code
字段和任何相关字段的另一个表。
为了获得code
标识字段的基值(基于日期),可以简单地以最低的期望值播种。不知道底层的RDMS,但对于MySQL,它将沿着http://dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html
所以,像
Documents 1-1 DocumentCodes
其中:
DocumentCodes
-------------
code : identity (seeded to desired base value)
documentId : int FK UNIQUE
允许单独生成code
字段(包括之前)的另一个替代方案,实际的Document实体如下:
DocumentCodes
-------------
code : identity PK
Documents
---------
id : identity
code : id FK
实际的code
字段可以播种到所需的基数,或者根据我的其他答案用作计算属性的一部分。
根据代码搜索文档:
答案 1 :(得分:1)
考虑到问题的范围并且不知道整个上下文,最简单的解决方案是将代码字段作为计算属性。
即。通过将种子值(基于截止日期)与Id字段连接,计算应用程序中的代码字段。
要根据代码搜索文档,您只需从给定代码中拆分Id,然后使用它来搜索Documents表。