在我的数据库中有3个表
的 CustomerType
CusID
的的EventType
EventTypeID
的 CustomerEventType
CusID
EventTypeID
alt text http://img706.imageshack.us/img706/8806/inserevent.jpg
Dim db = new CustomerEventDataContext
Dim newEvent = new EventType
newEvent.EventTypeID = txtEventID.text
db.EventType.InsertOnSubmit(newEvent)
db.SubmitChanges()
'To select the last ID of event'
Dim lastEventID = (from e in db.EventType Select e.EventTypeID Order By EventTypeID Descending).first()
Dim chkbx As CheckBoxList = CType(form1.FindControl("CheckBoxList1"), CheckBoxList)
Dim newCustomerEventType = New CustomerEventType
Dim i As Integer
For i = 0 To chkbx.Items.Count - 1 Step i + 1
If (chkbx.Items(i).Selected) Then
newCustomerEventType.INTEVENTTYPEID = lastEventID
newCustomerEventType.INTSTUDENTTYPEID = chkbxStudentType.Items(i).Value
db.CustomerEventType.InsertOnSubmit(newCustomerEventType)
db.SubmitChanges()
End If
Next
当我从CheckBoxList1只检查1个CustomerEventType的ID时,它工作正常。它将数据插入到带有ID 1和CustomerEventType ID 1的EventType中。但是,当我检查它们时,错误信息表示
无法添加已存在的实体。
有什么建议吗? Thx提前。
答案 0 :(得分:2)
在再次按下按钮之前,您是否更改了EventID
?对我而言,你看起来并没有。这将导致代码尝试将带有ID 1
的事件插入到数据库中,尽管它已经存在。
也许尝试自动增加事件ID或在尝试插入事件之前检查事件是否存在。
修改:
好的,这就是我认为你想要做的...如果我理解正确(它在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
,然后根据ID选择最后一个事件类型。这可能不会导致您刚刚添加的项目。SubmitChanges
后致电InsertOnSubmit
。 DataBaseContext
实现为您保存插入的对象,您可以引用它们。然后,您执行单个提交以提交所有更改。但请注意,在某些复杂的情况下,需要单独的SubmitChanges
,但这种情况很少发生。