The Row.Handle property is not stable but it should according to the docs:
https://github.com/esri/arcgis-pro-sdk/wiki/ProConcepts-Geodatabase#unique-instancing
Other handles are. Table.Handle for instance. Am I doing something wrong? Help is much appreciated, thanks.
The code snippet below is a unit test. The Row.Handle is not stable in Pro App context either, e.g. running in QueuedTask.
<SPAN class="punctuation token">[</SPAN>Test<SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">public</SPAN> <SPAN class="keyword token">void</SPAN> <SPAN class="token function">Compare_row_handles_SDE_LearningTest</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">var</SPAN> osaConnection <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">DatabaseConnectionProperties</SPAN><SPAN class="punctuation token">(</SPAN>EnterpriseDatabaseType<SPAN class="punctuation token">.</SPAN>Oracle<SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
Instance <SPAN class="operator token">=</SPAN> <SPAN class="string token">"bla"</SPAN><SPAN class="punctuation token">,</SPAN>
AuthenticationMode <SPAN class="operator token">=</SPAN> AuthenticationMode<SPAN class="punctuation token">.</SPAN>OSA
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">using</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">var</SPAN> geodatabase <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">Geodatabase</SPAN><SPAN class="punctuation token">(</SPAN>osaConnection<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">var</SPAN> featureClass <SPAN class="operator token">=</SPAN> geodatabase<SPAN class="punctuation token">.</SPAN>OpenDataset<SPAN class="operator token"><</SPAN>FeatureClass<SPAN class="operator token">></SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"foo"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">var</SPAN> row0 <SPAN class="operator token">=</SPAN> <SPAN class="token function">GetRow</SPAN><SPAN class="punctuation token">(</SPAN>featureClass<SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2453</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">var</SPAN> row1 <SPAN class="operator token">=</SPAN> <SPAN class="token function">GetRow</SPAN><SPAN class="punctuation token">(</SPAN>featureClass<SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2453</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
Console<SPAN class="punctuation token">.</SPAN><SPAN class="token function">WriteLine</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"rows are equal: {0}"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="token function">Equals</SPAN><SPAN class="punctuation token">(</SPAN>row0<SPAN class="punctuation token">,</SPAN> row1<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
Console<SPAN class="punctuation token">.</SPAN><SPAN class="token function">WriteLine</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"rows are reference equals: {0}"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="token function">ReferenceEquals</SPAN><SPAN class="punctuation token">(</SPAN>row0<SPAN class="punctuation token">,</SPAN> row1<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
Console<SPAN class="punctuation token">.</SPAN><SPAN class="token function">WriteLine</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"row handles are equal: {0}"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="token function">Equals</SPAN><SPAN class="punctuation token">(</SPAN>row0<SPAN class="punctuation token">.</SPAN>Handle<SPAN class="punctuation token">,</SPAN> row1<SPAN class="punctuation token">.</SPAN>Handle<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
Assert<SPAN class="punctuation token">.</SPAN><SPAN class="token function">AreNotEqual</SPAN><SPAN class="punctuation token">(</SPAN>row0<SPAN class="punctuation token">.</SPAN>Handle<SPAN class="punctuation token">,</SPAN> row1<SPAN class="punctuation token">.</SPAN>Handle<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">public</SPAN> <SPAN class="keyword token">static</SPAN> Row <SPAN class="token function">GetRow</SPAN><SPAN class="punctuation token">(</SPAN>Table table<SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">long</SPAN> oid<SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">using</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">var</SPAN> cursor <SPAN class="operator token">=</SPAN> table<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Search</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">QueryFilter</SPAN>
<SPAN class="punctuation token">{</SPAN>
WhereClause <SPAN class="operator token">=</SPAN> $<SPAN class="string token">"{table.GetDefinition().GetObjectIDField()} = {oid}"</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">false</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="operator token">!</SPAN> cursor<SPAN class="punctuation token">.</SPAN><SPAN class="token function">MoveNext</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">return</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">var</SPAN> row <SPAN class="operator token">=</SPAN> cursor<SPAN class="punctuation token">.</SPAN>Current<SPAN class="punctuation token">;</SPAN>
Assert<SPAN class="punctuation token">.</SPAN><SPAN class="token function">False</SPAN><SPAN class="punctuation token">(</SPAN>cursor<SPAN class="punctuation token">.</SPAN><SPAN class="token function">MoveNext</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"more than one row found"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">return</SPAN> row<SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>