C# 如何插入id为的对象?

C# 如何插入id为的对象?,c#,entity-framework,entity-framework-6,visual-studio-2015,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的自动递增功能插入它们 喜欢 但实体框架插入所有这些对象,如 Id=1,Name=Haber Id=2,Name=Basic Id=3,Name=Medium Id=4,Name=Pro 所以我需要你的帮助 @更新:为什么我需要这个?我们正在将旧数据库迁移到新数据库。但对于业务需求,某些属性和类别将不会在新数据库中使用。例如,如果类别属性isActiv

我使用的是C#4.5.1和实体框架6.1.3

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

我不想使用ef的自动递增功能插入它们

喜欢

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

  • Id=1,Name=Haber
  • Id=2,Name=Basic
  • Id=3,Name=Medium
  • Id=4,Name=Pro
所以我需要你的帮助


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

不确定它作为代码使用实体框架还是在Visual Studio中是可行的,但我确信它在SQL Server Management Studio中是可行的。您可以在SQLServerManagementStudio中更改主键的标识规范。如果将Identity增量值设置为2,然后将Identity种子值设置为1,那么我认为您将得到所需的结果,而无需在代码中指定ID值


如果必须使用实体框架代码,是否没有方法/属性可用于手动指定主键是什么?类似于SQL Server中的“SET IDENTITY\u INSERT”命令吗?

如果这是永久性的,请使用上面的注释。如果仅用于种子设定,请参阅以下答案:

编辑:对不起,那是我脑子里想不出来的。我使用的实际工作代码已编辑

我使用了如下代码:

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);
}

您可以使用DatabaseGenerateOption关闭自动增量。无?请确保您的Categories表未定义自动增量主键。这将允许您定义自己的值。或者,您可以将标识增量设置为2而不是1,这应该每隔一次跳过一次。(假设MSSQL)@DevilSuichiro和我试图将此数据注释(DatabaseGeneratedOption.None)添加到我的通用T Id{get;set;}属性中。但它仍然会自动增加它。我不知道我遗漏了什么。@Lost_In_Library:有了这个数据注释,EF应该在它的insert语句中添加ID值,但是你的数据库结构还不能更新,它应该不会自动递增这个列。但是,您可以使用Steve Greene的建议,只需将其包装在一个using(var x=datacontext.Database.BeginTransaction())中,先调用此代码还是先调用模型?这不起作用,因为Identity_Insert仅用于当前事务,而EF将每个命令包装在其自己的事务中。这不是用于种子设定的jost。但你的密码给了我一个主意。我可以进行字符串操作,并直接执行sql命令以在db中创建行。@DevilSuichiro您确定吗?我会试试这个,但是如果ef包装了我的sql命令,那么它就没有用了…对不起,我在我的代码中查找了它,我使用的是上面的。
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);
}