繁体   English   中英

EF6:如何根据实体ID自动生成唯一编号

[英]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,并将其增加一个并使用,但是我正在寻找一种更好的解决方案,例如计算列或将代码生成分配给数据库的任何其他方法。

  • 如果尝试将其定义为计算列,则无法访问ID。
  • 无法将其标记为“身份”,因为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字段可以播种到所需的基数,或者根据我的其他答案用作计算属性的一部分。

  1. 在DocumentCodes表中创建一个实体,并获取生成的代码
  2. 根据生成的代码和从日期生成的数字为最终用户创建计算代码
  3. 创建Document实体,传入生成的代码

要基于代码搜索文档:

  1. 从计算的代码中删除日期部分
  2. 在文档表中搜索代码

给定问题的范围并且不了解整个上下文,最简单的解决方案是将代码字段作为计算属性

即通过将种子值(基于截止日期)与Id字段连接起来,在应用程序中计算代码字段。

要基于代码搜索文档,您只需将ID与给定的代码分开,然后使用它在“文档”表中进行搜索。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM