使用C#Guid作为唯一的非主键字段
我使用代码优先迁移创建发票表,该表需要具有唯一的发票号。我不想让这个领域成为我的主要关键。我首选的方法是使用Guid作为发票号码,这样每次插入发票项目时都会创建一个唯一值。我可以生成随机字符串,但我不想编写逻辑来创建随机字符串。使用C#Guid作为唯一的非主键字段
请注意,我不想为此安装任何外部库。 我正在做我与Fluent API的映射,而不是数据注解。 请将其纳入您的答案。
这对我来说可以实现只使用Guid列吗?
在此先感谢。
当在SQL Server中定义的表,将该列定义唯一标识符NOT NULL DEFAULT NEWID()
谢谢你为你的答案。我使用Code First Migrations,所以我实际上并没有在SQL Server中定义表。我必须这样做,以便从我的Fluent API映射推断出NOT NULL DEFAULT – strizzwald
我相信你必须在Migration的Up和Down函数中手动修改表。有关详细信息,请参阅https://andy.mehalick.com/2014/02/06/ef6-adding-a-created-datetime-column-automatically-with-code-first-migrations/这是关于日期栏,但应该同样适用于指导。 –
布拉德利是正确的。首先使用代码并不排除您在初始创建后更改表定义。此外,无论如何,你应该控制你的数据库项目。 –
在你的发票类的实体,如下面创建一个列;
public Guid InvoiceNumber {get;set;}
与
public Invoice(){
InvoiceNumber = Guid.NewGuid();
}
在newing了发票,你应该有一个预填充的Guid
谢谢,这也会处理重复的主键。换句话说,如果我这样做,那么有可能两次生成相同的Guid? – strizzwald
相同的GUID出现两次的机会非常非常不可能.. http://*.com/questions/39771/is-a-guid-unique-100-of-the-time – uk2k05
是的,这可能是一个构造函数。 guid的sql类型是唯一标识符,您应该调用newid函数来生成值 –
想象用户通过电话提供发票号码:) – CoderHawk
http://*.com/questions/967170/are-sequential-numbers-necessary – CoderHawk