использовать последовательное поле для каждого пользователя в структуре объекта - PullRequest
3 голосов
/ 22 мая 2011

У меня есть объект с полем кода.Для каждого пользователя, который использует этот объект, каждый объект, который вставляет пользователь, должен иметь код.Поэтому я написал код, который выполняет следующую логику:
1. если пользователь установил поле кода - тогда используйте его код.
2. если пользователь не установил поле кода - прочитайте из БД следующеепоследовательный код (начиная с 1, поиск следующего последовательного кода, который еще не существует) и используйте этот код.

Сценарий такой проблемы:
Предполагается, что у пользователя есть возможность добавить две сущностиодним щелчком мыши.
Предполагая, что следующий последовательный код должен быть "5".
В первом объекте пользователь установил код = 5, а во втором объекте пользователь не установил код.
Потому чтоЯ использую структуру сущностей, и в конце логики есть одно изменение фиксации / сохранения, я вставляю первую сущность (ту, которая имеет код = 5) и вторую сущность, ища в БД следующий следующий последовательный код, которыйне существуетСледующий серийный код, который еще не существует в базе данных, - «5».Поэтому я установил для второй сущности код «5».
В конце концов я придумал две сущности с неправильным кодом = 5.

Я подумал о способах ее решения.
Один из способовделать SaveChanges сразу после сохранения первой сущности, но это может сделать много обращений к БД, и я не уверен в этом решении.
Другой способ - искать в БД и в прикрепленных объектах, но я действительно незнаете, как это сделать.

У кого-нибудь есть идеи получше?

1 Ответ

0 голосов
/ 19 декабря 2011

Вы можете использовать столбец IDENTITY, чтобы позволить SQL Server автоматически заполнять его, когда пользователь не указывает его, а когда у вас есть тот, который они указывают, вы просто помещаете его в свой запрос INSERT / UPDATE вместе с другимполя.Это сохранит вашу ценность вместо создания новой.Вам нужно проверить и убедиться, что идентификатор еще не использовался, прежде чем делать это, если у вас есть уникальное ограничение на это поле или если вы не хотите разрешать дубликаты, когда пользователь указывает значение.

В следующем примере используется таблица MyTable с 3 столбцами (ID int IDENTITY, FIRST_NAME varchar, LAST_NAME varchar).Я бы порекомендовал использовать параметры вместо передачи значений в строке sql, как я это сделал ниже, так как это был всего лишь пример, и это было быстрее собрать таким образом.

String sSQL = "";
String sFields = "";
String sValues = "";
String sCode = "";
// sCode = ... (get user entered code)
String sFirstName = "John";
String sLastName = "Doe";

if (sCode != "") 
{ //Add the user specified value and field for the identity column to the SQL
    sFields = "ID, ";
    sValues = sCode + ", ";
}
sFields += "FIRST_NAME, LAST_NAME";
sValues += "'" + sFirstName.Replace("'","''") + "', '" + sLastName.Replace("'","''") + "'";

sSQL = "INSERT INTO MyTable (" + sFields + ") VALUES (" + sValues + ")"
//execute the sql statement
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...