如何插入带有我的ID的对象?

时间:2015-10-20 15:54:44

标签: c# entity-framework entity-framework-6 visual-studio-2015

我正在使用C#4.5.1和实体框架6.1.3。

我需要做的就是我想插入我的对象主要id键,如; 1-3-5-7-9-11-13-15等......

我不想使用ef。

的自动增量功能插入它们

像;

       public static void SeedCategories(DataContext context)
    {
        context.Categories.AddOrUpdate(new Category
        {
            Id = 1,
            Name = "Haber",
            IsActive = true
        });

        context.SaveChanges();

        context.Categories.AddOrUpdate(new Category
                                       {
                                           Id = 5,
                                           Name = "Basic",
                                           ParentId = 1,
                                           IsActive = true
                                       },
                                       new Category
                                       {
                                           Id = 7,
                                           Name = "Medium",
                                           ParentId = 1,
                                           IsActive = true
                                       },
                                       new Category
                                       {
                                           Id = 9,
                                           Name = "Pro",
                                           ParentId = 1,
                                           IsActive = true
                                       },
                                       new Category
                                       {
                                           Id = 11,
                                           Name = "Advanced",
                                           ParentId = 1,
                                           IsActive = true
                                       },
                                       new Category
                                       {
                                           Id = 13,
                                           Name = "Ultimate",
                                           ParentId = 1,
                                           IsActive = true
                                       }
            );

        context.SaveChanges();
    }

但实体框架插入所有这些对象,如;

  • Id = 1,Name = Haber
  • Id = 2,Name = Basic
  • Id = 3,Name = Medium
  • Id = 4,Name = Pro

所以我需要你的帮助......

@Update:为什么我需要这个?我们正在将旧数据库迁移到新数据库。但是对于业务需求,某些属性和类别将不会在新数据库中使用。例如,如果category属性isActive = false。所以我只选了isActive = true。总结:我有类别列表,如id = 3,(Id = 4 isActive = false),id = 5,id = 33,id = 410等。

2 个答案:

答案 0 :(得分:1)

不确定它是否可以作为使用Entity Framework或Visual Studio的代码,但我确信它在SQL Server Management Studio中是可行的。您可以在SQL Server Management Studio中更改主键的标识规范。如果将Identity Increment值设置为2,然后将Identity Seed值设置为1,我认为您最终会得到所需的结果,而无需在代码中指定ID值。

如果必须使用Entity Framework代码执行此操作,是否没有可用于手动指示主键是什么的方法/属性?类似于SQL Server中的“SET IDENTITY_INSERT”命令?

答案 1 :(得分:1)

如果这是永久性的,请使用上面的评论。如果仅用于播种,请参阅以下答案:http://www.rubydoc.info/gems/paperclip/Paperclip/ClassMethods

编辑:对不起,这不是我的头脑。我使用的实际工作代码已经过编辑。

我选择了这样的代码:

if (!dataContext.Categories.Any())
{
var sqlInsert = @"SET IDENTITY_INSERT [dbo].[Category] ON;
   INSERT INTO Category (Id, Name, ParentId, IsActive) VALUES (5, 'Basic', 1, 1);
   INSERT INTO Category (Id, Name, ParentId, IsActive) VALUES (7, 'Medium', 1, 1);
   SET IDENTITY_INSERT [dbo].[Category] OFF;";
   dataContext.Database.ExecuteSqlCommand(sqlInsert);
}