首先是EF代码 - 自动生成的Id

时间:2014-05-09 13:30:45

标签: ef-code-first unique guid

================问题================

首先,我正在使用Entity框架(代码优先)。我有以下课程:

 public class RandomObject
 {
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity), Column(Order = 1)]
    public int Id { get; protected set; }

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity), Column(Order = 2)]
    public Guid UniqueId { get; protected set; }

    public string Other { get; set; }
 }

我还有一个migration-folder(包),我用一些对象为数据库设定种子。

    private void AddDefaultObjects(Context context)
    {
        var object1 = new RandomObject{ Other = "qsdf1" };
        var object2 = new RandomObject{ Other = "qsdf2" };
        var object3 = new RandomObject{ Other = "qsdf3" };

        var objects = new RandomObject[3]{object1 , object2 , object3 };

        context.RandomObjects.AddOrUpdate(object => object.Id, objects);
        context.SaveChanges();
    }

但是当我添加对象时,它们都得到相同的UniqueId => NOK(但不同的Id => OK)

================尝试================

我尝试添加属性

    [Index(IsUnique = true)]

或设置(在我的迁移配置文件中)

    column.DefaultValueSql = "newid()";

================结果================

Id   |   UniqueId
--------------------------------------------
19   |   db1e353e-7dd7-e311-8250-8c89a5c20da1
20   |   dc1e353e-7dd7-e311-8250-8c89a5c20da1
21   |   dd1e353e-7dd7-e311-8250-8c89a5c20da1

1 个答案:

答案 0 :(得分:1)

试试这个....我认为你的AddOrUpdate在第一个参数中需要复合主键的两个部分:

context.RandomObjects.AddOrUpdate(object => 
                                  new { object.Id, object.UniqueId }, 
                                  objects);