我们的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作为基类)。我希望在此实体的代码中定义I。
你建议如何处理这个问题?
发布于 2015-08-04 21:33:09
AddOrUpdate有一个重载方法,您可以在其中指定应该考虑的属性,以决定是否应该添加实体。
AddOrUpdate方法提供了一些重载,允许您提供一个Func表达式作为第一个参数,该参数允许您为EF提供一个表达式,以评估应该运行Add还是Update。我的最终代码如下所示:
context.Departments.AddOrUpdate(
d => d.Name,
new Department() { Name = "English" },
new Department() { Name = "Maths" },
new Department() { Name = "French" }
);现在可以按预期工作,因为只对Name列执行比较。
来源:http://www.gregpakes.co.uk/post/using-addordelete-to-seed-data-without-the-key-column
https://stackoverflow.com/questions/31810355
复制相似问题