Учитывая следующий код (который в основном не имеет значения, за исключением двух последних строк), каким будет ваш метод, чтобы получить значение поля идентификатора для новой записи, которая была только что создана? Сделаете ли вы второй вызов к базе данных, чтобы получить ее на основе первичного ключа объекта (который может быть проблематичным, если его нет), или на основе последней вставленной записи (которая может быть проблематичной в многопоточных приложениях) или есть может быть, более разумный способ вернуть новое значение в то же время, когда вы делаете вставку?
Похоже, должен быть способ вернуть Identity на основе только что выполненной операции вставки, а не запрашивать ее на основе других средств.
public void Insert(O obj)
{
var sqlCmd = new SqlCommand() { Connection = con.Conn };
var sqlParams = new SqlParameters(sqlCmd.Parameters, obj);
var props = obj.Properties.Where(o => !o.IsIdentity);
InsertQuery qry = new InsertQuery(this.TableAlias);
qry.FieldValuePairs = props.Select(o => new SqlValuePair(o.Alias, sqlParams.Add(o))).ToList();
sqlCmd.CommandText = qry.ToString();
sqlCmd.ExecuteNonQuery();
}
РЕДАКТИРОВАТЬ: Хотя этот вопрос не является дубликатом в самой строгой манере, он почти идентичен тому, который имеет несколько действительно хороших ответов: Лучший способ получить идентичность вставленной строки?