如何不为种子实体

时间:2015-08-04 13:14:06

标签: .net entity-framework code-first

我们将BaseEntity定义如下:

public abstract class BaseEntity
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        ...
}

由于Ids由DB生成。但是,现在我们要添加种子数据。我添加了以下种子代码:

            Country c = new Country()
            {
                Id = new Guid("251D06A5-E864-4B9F-803B-00E409B0F5AB"),
                Name = "Oceania",
                RegionType = RegionTypeEnum.Region,
                ParentCountryId = worldId
            };
            AddOrUpdate(c);

在这种情况下,我的“Id”被忽略,并生成了新的Id。因此,种子总是创造新的国家。

因此,我不需要数据库来生成此实体的Id(但我想将BaseEntity用作基类)。我希望在这个实体的代码中定义ID。

您如何建议处理此问题?

1 个答案:

答案 0 :(得分:2)

AddOrUpdate有一个重载方法,您可以在其中指定应该考虑哪个属性来决定是否应该添加实体。

  

AddOrUpdate方法提供了一些重载,允许您提供Func表达式作为第一个参数,它允许您为EF提供一个表达式来评估是否应该运行Add或Update。我的最终代码如下:

   context.Departments.AddOrUpdate(
    d => d.Name,
    new Department() { Name = "English" },
    new Department() { Name = "Maths" },
    new Department() { Name = "French" }
);
  

现在可以按预期工作,因为仅在“名称”列上执行比较。

来源:http://www.gregpakes.co.uk/post/using-addordelete-to-seed-data-without-the-key-column