首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何不为种子实体设置DatabaseGeneratedOption.Identity

如何不为种子实体设置DatabaseGeneratedOption.Identity
EN

Stack Overflow用户
提问于 2015-08-04 21:14:06
回答 1查看 382关注 0票数 2

我们的BaseEntity定义如下:

代码语言:javascript
运行
复制
public abstract class BaseEntity
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        ...
}

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

代码语言:javascript
运行
复制
            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。

你建议如何处理这个问题?

EN

Stack Overflow用户

发布于 2015-08-04 21:33:09

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

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

代码语言:javascript
运行
复制
   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

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31810355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档