使用C#Guid作为唯一的非主键字段

问题描述:

我使用代码优先迁移创建发票表,该表需要具有唯一的发票号。我不想让这个领域成为我的主要关键。我首选的方法是使用Guid作为发票号码,这样每次插入发票项目时都会创建一个唯一值。我可以生成随机字符串,但我不想编写逻辑来创建随机字符串。使用C#Guid作为唯一的非主键字段

请注意,我不想为此安装任何外部库。 我正在做我与Fluent API的映射,而不是数据注解。 请将其纳入您的答案。

这对我来说可以实现只使用Guid列吗?

在此先感谢。

+0

是的,这可能是一个构造函数。 guid的sql类型是唯一标识符,您应该调用newid函数来生成值 –

+4

想象用户通过电话提供发票号码:) – CoderHawk

+0

http://*.com/questions/967170/are-sequential-numbers-necessary – CoderHawk

当在SQL Server中定义的表,将该列定义唯一标识符NOT NULL DEFAULT NEWID()

+0

谢谢你为你的答案。我使用Code First Migrations,所以我实际上并没有在SQL Server中定义表。我必须这样做,以便从我的Fluent API映射推断出NOT NULL DEFAULT – strizzwald

+0

我相信你必须在Migration的Up和Down函数中手动修改表。有关详细信息,请参阅https://andy.mehalick.com/2014/02/06/ef6-adding-a-created-datetime-column-automatically-with-code-first-migrations/这是关于日期栏,但应该同样适用于指导。 –

+0

布拉德利是正确的。首先使用代码并不排除您在初始创建后更改表定义。此外,无论如何,你应该控制你的数据库项目。 –

在你的发票类的实体,如下面创建一个列;

public Guid InvoiceNumber {get;set;} 

public Invoice(){ 
     InvoiceNumber = Guid.NewGuid(); 
} 

在newing了发票,你应该有一个预填充的Guid

+0

谢谢,这也会处理重复的主键。换句话说,如果我这样做,那么有可能两次生成相同的Guid? – strizzwald

+0

相同的GUID出现两次的机会非常非常不可能.. http://*.com/questions/39771/is-a-guid-unique-100-of-the-time – uk2k05