2014-12-13 1 views
3

При использовании Service Stack OrmLite, как вы точно вставляете идентификационные значения?Сервисный стек OrmLite и Identity_Insert

Например, в SQL Server, когда Identity_Insert включен для таблицы, значение идентификатора будет вставлено точно так, как указано, и вместо этого оно не будет сгенерировано автоматически.

ответ

1
  1. Не украшайте свой первичный ключ атрибутом [AutoIncrement]. Если вы это сделаете, то OrmLite оставит это имя и значение столбца из инструкции INSERT.
  2. Выдать инструкцию SET IDENTITY_INSERT. Убедитесь, что OrmLite создает имя таблицы для вас, принимая во внимание любые атрибуты [Schema] и [Alias].

Например:

public void InsertAll(IEnumerable<TTable> set) 
{ 
    const string identity = "SET IDENTITY_INSERT {0} {1}"; 
    var schema = typeof(TTable).FirstAttribute<SchemaAttribute>(); 
    var tableName = typeof(TTable).FirstAttribute<AliasAttribute>(); 
    var qualified = (schema == null ? "dbo" : schema.Name) + "." + 
        (tableName == null ? typeof(TTable).Name : tableName.Name); 
    using (var db = _dbConnectionFactory.OpenDbConnection()) 
    { 
     try 
     { 
      db.ExecuteSql(string.Format(identity, qualified, "ON")); 
      db.InsertAll(set); 
     } 
     finally 
     { 
      db.ExecuteSql(string.Format(identity, qualified, "OFF")); 
     } 
    }); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^