我正在使用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();
}
但实体框架插入所有这些对象,如;
所以我需要你的帮助......
@Update:为什么我需要这个?我们正在将旧数据库迁移到新数据库。但是对于业务需求,某些属性和类别将不会在新数据库中使用。例如,如果category属性isActive = false。所以我只选了isActive = true。总结:我有类别列表,如id = 3,(Id = 4 isActive = false),id = 5,id = 33,id = 410等。
答案 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);
}