繁体   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