[英]Entity Framework and Guid
假设我有以下代码:
var foo = new Foo { Id = Guid.NewGuid(); }
var id = foo.Id; // have access to the id here
context.Add(foo);
context.SaveChanges();
Guid.NewGuid()
如何避免与数据库中已有的Guid冲突? 如果生成的guid已经存在于数据库中怎么办? 我不明白
使用自动增量ID是显而易见的,但是直到将其保存到有意义的数据库后,我才知道该ID。 guid如何“不同”地工作?
Guid.NewGuid()如何避免与数据库中已有的Guid冲突?
如果没有。 您只是每次都有不同的ID生成。 实际上,产生均等的Guid的机会很小 。
如果生成的GUID已经存在于数据库中怎么办?
如果您提供相同的Guid值,则将违反主键约束。 以下代码将产生无法插入重复的密钥错误
var guid = Guid.NewGuid();
context.Foos.Add(new Foo { Id = guid });
context.Foos.Add(new Foo { Id = guid });
context.SaveChanges();
注意:您可以要求Entity Framework在数据库端为您生成GUID键。 为此使用DatabaseGenerated属性:
public class Foo
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public int Value { get; set; }
}
现在,只需保存Foo而无需手动生成密钥,EF就会使用数据库生成的guid更新id:
var foo = new Foo { Value = 42 };
context.Foos.Add(foo); // id is 00000000-0000-0000-0000-000000000000
context.SaveChanges();
// now id has value generated during insert 421ffa94-1970-e311-9e31-001fd09468de
根据MSDN ,它可以被复制的可能性非常低。
备注部分:
GUID是128位整数(16个字节),可在需要唯一标识符的所有计算机和网络中使用。 这样的标识符被复制的可能性非常低。
如果Id是Foo表的Unique/Primary Key
,则如果重复则将引发错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.