如何使用GUID在Entity Framework中创建唯一主键,如果找到重复,则重新生成GUID?

时间:2013-02-05 15:57:44

标签: c# .net entity-framework ef-code-first

我有一个CodeFirst Entity Framework数据库。我自己生成一个GUID,并在模型中定义了以下内容:

    [Required, Key, DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None)]
    public string BatchId { get; set; }

我的目标 - 有没有办法可以先验证GUID在数据库中是否已经存在,然后根据需要创建一个新的GUID,直到找到一个唯一的GUID?

3 个答案:

答案 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;
}

检查返回值是否包含任何内容。如果是,则表示您有重复。