Как вставить в столбец идентичности с кодом C # - PullRequest
0 голосов
/ 05 июня 2019

Да, я знаю, есть много материалов о том, как включить идентификационную вставку и отключить ее после, что на самом деле я хочу использовать.Но есть еще одна проблема, поэтому я начал этот вопрос.

Обычный способ вставить что-то в столбец идентификаторов таков:

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."?В настоящее время я работаю с localdb из VS, но проект будет развернут на реальном сервере после его завершения

  • ОСНОВНАЯ ПРОБЛЕМА: я хочу вставить полный объект, а не только значение длястолбец идентичности.Объект имеет заданный идентификатор, который в БД является 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 Ответ

1 голос
/ 05 июня 2019

Так что после некоторого разговора (большой привет @SteveTodd) мне удалось получить то, что я хотел.

Объяснение: Я хотел вставить свои собственные первичные ключи (по разным причинам). Я знал, что вы можете временно отключить Идентичность, но решение состоит в том, чтобы полностью отключить его.

Еще один вопрос, который помог мне решить и понять эту проблему:

Ввод ключей вручную с Entity Framework

В моем случае теперь это выглядит так:

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

TLDR: Добавьте это между [Ключом] и вашим полем:

[DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]
...