Вы изменили EventID
до повторного нажатия кнопки. Для меня это выглядит как вы не сделали. Это приведет к тому, что код попытается вставить событие с ID 1
в базу данных, хотя оно уже там.
Возможно, попробуйте увеличить идентификатор события автоматически или проверьте, присутствует ли событие уже перед попыткой его вставить.
Редактировать:
Хорошо, вот что, я думаю, вы хотите сделать ... если я правильно понял (это на C #, так как я более свободно говорю на этом языке - однако вы должны быть в состоянии легко преобразовать алгоритм в VB) принять это как псевдокод):
var db = new CustomerEventDataContext();
var newEvent = db.EventTypeSingleOrDefault(x => x.EventTypeId == txtEventID.Text);
if (newEvent != null) {
newEvent = new EventType();
newEvent.EventTypeId = txtEventID.Text;
db.EventType.InsertOnSubmit();
}
var chkbx = (CheckBoxList) form1.FindControl("CheckBoxList1");
for (int i = 0; i < chkbx.Items.Count; i++) {
var value = chkbxStudentType.Items(i).Value;
if (db.CustomerEventTypes.SingleOrDefault(x => x.EventTypeId == newEvent.EventTypeId) != null) {
// item already exists
} else {
var newCustomerEventType = new CustomerEventType();
newCustomerEventType.INTEVENTTYPEID = newEvent.EventTypeId;
newCustomerEventType.INTSTUDENTTYPEID = value;
db.CustomerEventType.InsertOnSubmit(newCustomerEventType);
}
}
db.SubmitChanges();
Я заметил две вещи:
- Вы добавляли новый
EventType
и затем выбирали последний тип события на основе идентификатора. Это может не привести к тому, что вы только что добавили элемент.
- Вам не нужно звонить
SubmitChanges
после каждого InsertOnSubmit
. Реализация DataBaseContext
содержит вставленные объекты для вас, и вы можете ссылаться на них. Затем вы делаете одну отправку, чтобы зафиксировать все изменения. Обратите внимание, однако, что в некоторых сложных обстоятельствах требуется отдельный SubmitChanges
, но это редко бывает.