如何使用c#代码插入“身份”列

时间:2019-06-05 16:45:44

标签: c# sql asp.net linq identity-insert

是的,我知道,关于如何打开标识插入并在之后将其关闭的材料很多,这实际上是我要使用的东西。但是我的问题还有更多,这就是为什么我开始这个问题。

将某些内容插入标识列的常规方法是:

using (var connection = new SqlConnection("Connection String here"))
{
    connection.Open();
    var query = "SET IDENTITY_INSERT dbo.MyTable ON; INSERT INTO dbo.MyTable (IdentityColumn) VALUES (@identityColumnValue); SET IDENTITY_INSERT dbo.MyTable OFF;";
    using (var command = new SqlCommand(query, connection)
    {
        command.Parameters.AddWithValue("@identityColumnValue", 3);
        command.ExecuteNonQuery();
    }
}

我对此有2个问题:

  • 我需要使用此“ dbo”吗?我目前正在使用VS中的localdb,但该项目完成后将部署在真实服务器上

  • 主要问题:我想插入一个完整的对象,而不仅仅是identity列的值。该对象具有给定的ID,在db中为PK。而且它有一个字符串值,也必须插入。

我该怎么做? 我正在寻找类似的东西:

Context.Database.Add(myObject);
*Sql string with c# to turn on identity insert*
context.database.SaveChanges();
*Sql string with c# to turn off identity insert*

这是我的模型,因此您可以更好地理解该问题:

public class myObject

        [Key]
        public int Id { get; set; }

        public string Position { get; set; } 

1 个答案:

答案 0 :(得分:1)

因此,经过一些交谈(对@SteveTodd的大喊),我设法得到了想要的东西。

说明:我想插入自己的主键(出于各种原因)。我确实知道您可以暂时关闭身份,但是解决方案是基本上完全将其关闭。

另一个帮助我解决和理解此问题的问题:

Entering keys manually with Entity Framework

就我而言,现在看起来像这样:

public class myObject
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]
    int TokenId { get; set; }
}

TLDR:在[Key]和您的字段之间添加此代码:

[DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]