我如何用我的id插入对象
本文关键字:插入 对象 id 我的 何用 | 更新日期: 2023-09-27 18:18:36
我使用的是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:为什么我需要这个?我们正在将旧数据库迁移到新数据库。但由于业务需求,一些属性和类别在新数据库中将不使用。例如如果类别属性isActive = false。我只取isActive = true。作为总结:我有一个类别列表,如id = 3, (id = 4是isActive = false), id = 5, id = 33, id = 410等。
不确定它是否可以作为使用实体框架或Visual Studio的代码,但我确信它在SQL Server管理工作室是可行的。您可以在SQL Server Management Studio中更改主键的标识规范。如果您将Identity Increment的值设置为2,然后将Identity Seed的值设置为1,我认为您最终将得到所需的结果,而无需在代码中指定ID值。
如果你必须使用实体框架代码,是否没有方法/属性可以让你手动指定主键是什么?类似于"SET IDENTITY_INSERT"在SQL Server命令?
如果这是永久性的,请使用上面的注释。如果它只是用于播种,请参阅以下答案:我如何暂时关闭EF Code First中的IDENTITY列?
编辑:对不起,我一时想不起来。我使用的实际工作代码是编辑过的。
我的代码是这样的:
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);
}