[英]EF6: How to generate a unique number automatically based on entity Id
考虑这样一个实体:
public class Document
{
public int Id { get; set; }
public long code { get; set; }
// Rest of Props
}
我需要生成一个唯一的长代码,并且我更喜欢根据Id生成它。
一个简单的经典但不安全的解决方案是获取最后一个ID,并将其增加一个并使用,但是我正在寻找一种更好的解决方案,例如计算列或将代码生成分配给数据库的任何其他方法。
现在,我正在尝试借助事务处理来确保以前的经典解决方案安全。
有更好的建议吗?
限制每个表的单个标识字段的解决方法只是将“ 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
字段可以播种到所需的基数,或者根据我的其他答案用作计算属性的一部分。
要基于代码搜索文档:
给定问题的范围并且不了解整个上下文,最简单的解决方案是将代码字段作为计算属性 。
即通过将种子值(基于截止日期)与Id字段连接起来,在应用程序中计算代码字段。
要基于代码搜索文档,您只需将ID与给定的代码分开,然后使用它在“文档”表中进行搜索。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.