簡體   English   中英

Devart dotconnect-有沒有辦法強制提交順序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM