[英]Devart dotconnect - Is there a way to force the commit order?
我正在將devart dotconnect用於Oracle v7.7,並且遇到了意外錯誤。 我正在向表A中插入一條記錄,然后向表B中再插入一些記錄,其中B具有到A的外鍵,而我得到的是未找到父鍵的錯誤。
SsinpatDataContext dc = new SsinpatDataContext();
Document doc = new Document();
doc.Text = "bla bla bla";
var id = dc.ExecuteQuery<decimal>("SELECT DOCUMENT_SEQ.NEXTVAL FROM DUAL");
doc.Id = id.ElementAt(0);
dc.Documents.InsertOnSubmit(doc);
DocumentRows dr = new DocumentRows();
dr.Text = "bla bla bla";
dr.DocId = doc.Id;
dc.DocumentRows.InsertOnSubmit(dr);
dc.SubmitChanges();
這將引發文本異常“ ORA-02291:違反完整性約束-找不到父鍵”在我看來,devart嘗試首先提交DocumentRows對象,然后才提交Document對象。
現在,我的問題是是否有一種方法可以強制執行提交命令。
謝謝。
問題可能是您的模型中實體類Document的Id屬性的IdGenerator設置為Sequence。 而且,由於您正在代碼中執行此查詢
"SELECT DOCUMENT_SEQ.NEXTVAL FROM DUAL"
下一個序列值被查詢兩次,並且差異是該序列的最后一個值。 您可以通過記錄來檢查它:
SsinpatDataContext dc = new SsinpatDataContext(){Log=Console.Out};
為避免在您的方案中發生此錯誤,應將實體類Document的Id屬性的IdGenerator設置為None,並重新生成模型的代碼。
但是,更好的情況如下:
1)將實體類Document的Id屬性的IdGenerator設置為Sequence; 在您的情況下,指定序列的名稱-DOCUMENT_SEQ;
2)重新編寫您的代碼:
SsinpatDataContext dc = new SsinpatDataContext(){Log=Console.Out};
Document doc = new Document();
doc.Text = "bla bla bla";
DocumentRows dr = new DocumentRows();
dr.Text = "bla bla bla";
dr.Doc = doc;
dc.Documents.InsertOnSubmit(doc);
dc.SubmitChanges();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.