我有一个CodeFirst Entity Framework数据库。我自己生成一个GUID,并在模型中定义了以下内容:
[Required, Key, DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None)]
public string BatchId { get; set; }
我的目标 - 有没有办法可以先验证GUID在数据库中是否已经存在,然后根据需要创建一个新的GUID,直到找到一个唯一的GUID?
答案 0 :(得分:2)
这不是Guid
,而是string
;将它声明为Guid
会更好,那么您不必担心。
实际上,同一台机器中不会生成相同的Guid
两次。因此,如果将属性更改为:
[Required, Key, DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None)]
public Guid BatchId { get; set; }
答案 1 :(得分:1)
请务必首先阅读数据库,以确保确定无误。但是E = MC ^ 2或你的退款。
Context.DbSet.find(MyGuid);
没有找到.... 如果您使用Guid.New();
,请告知我们何时获得顺便说一下你打算为你的gUid使用字符串还是键入Guid / DBType UniqueIdentier?如果是这样,您应该重新考虑所选择的类型。
答案 2 :(得分:0)
这是我自己制作的旧代码:
private static IQueryable<MyData> FetchFromDatabase(MyContainer context, Guid guid)
{
if (!context.DatabaseExists())
throw Constants.ExceptionDatabaseMissing;
return from data in context.MyDataSet
where data.GUID.Equals(guid)
select data;
}
检查返回值是否包含任何内容。如果是,则表示您有重复。