Skip to content

Commit 299fa09

Browse files
author
github-actions
committed
Documentation update
1 parent f556f06 commit 299fa09

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

docs/migrations/migration8/index.html

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,6 +1060,58 @@ <h3 id="29-code-classlanguage-textdefaultastvaluecode-attribute-added-v81-and-ne
10601060
<span class="token comment">// demonstrates setting a default value for an output field argument that has a complex type</span>
10611061
<span class="token keyword">public</span> <span class="token return-type class-name"><span class="token keyword">string</span></span> <span class="token function">Field2</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token attribute"><span class="token class-name">DefaultAstValue</span><span class="token attribute-arguments"><span class="token punctuation">(</span><span class="token string">"{ field1: \"sample2\" }"</span><span class="token punctuation">)</span></span></span><span class="token punctuation">]</span> <span class="token class-name">MyInputObject1</span> arg<span class="token punctuation">)</span> <span class="token operator">=></span> arg<span class="token punctuation">.</span>Field1<span class="token punctuation">;</span>
10621062
<span class="token punctuation">}</span></code></pre></div>
1063+
<h3 id="30-noclrmapping-extension-for-input-fields-with-custom-clr-mapping-from-version-840" style="position:relative;"><a href="#30-noclrmapping-extension-for-input-fields-with-custom-clr-mapping-from-version-840" aria-label="30 noclrmapping extension for input fields with custom clr mapping from version 840 permalink" class="anchor before"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>30. NoClrMapping Extension for Input Fields with Custom CLR Mapping (from version 8.4.0)</h3>
1064+
<p>A new extension method, <code class="language-text">NoClrMapping</code>, has been introduced to give you fine-grained control
1065+
over how input object fields are mapped to CLR types. In many scenarios, your input types may
1066+
include fields that are computed or require custom processing before being set on your CLR model.
1067+
For example, you might have a CLR type with a single <code class="language-text">FullName</code> property but want your input
1068+
object to accept separate <code class="language-text">firstName</code> and <code class="language-text">lastName</code> fields. By marking these fields with
1069+
<code class="language-text">NoClrMapping()</code>, they are excluded from the automatic binding process. You can then override
1070+
the <code class="language-text">ParseDictionary</code> method to manually combine these values into the CLR's <code class="language-text">FullName</code> property,
1071+
while letting the base implementation handle any automatically mapped fields (such as <code class="language-text">Age</code>). The
1072+
following example illustrates this pattern:</p>
1073+
<div class="gatsby-highlight" data-language="csharp"><pre class="language-csharp"><code class="language-csharp"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Person</span>
1074+
<span class="token punctuation">{</span>
1075+
<span class="token keyword">public</span> <span class="token return-type class-name"><span class="token keyword">string</span></span> FullName <span class="token punctuation">{</span> <span class="token keyword">get</span><span class="token punctuation">;</span> <span class="token keyword">set</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token keyword">string</span><span class="token punctuation">.</span>Empty<span class="token punctuation">;</span>
1076+
<span class="token keyword">public</span> <span class="token return-type class-name"><span class="token keyword">int</span></span> Age <span class="token punctuation">{</span> <span class="token keyword">get</span><span class="token punctuation">;</span> <span class="token keyword">set</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>
1077+
<span class="token punctuation">}</span>
1078+
1079+
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">PersonInputType</span> <span class="token punctuation">:</span> <span class="token type-list"><span class="token class-name">InputObjectGraphType<span class="token punctuation">&lt;</span>Person<span class="token punctuation">></span></span></span>
1080+
<span class="token punctuation">{</span>
1081+
<span class="token keyword">public</span> <span class="token function">PersonInputType</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
1082+
<span class="token punctuation">{</span>
1083+
Name <span class="token operator">=</span> <span class="token string">"PersonInput"</span><span class="token punctuation">;</span>
1084+
1085+
<span class="token comment">// Define fields for 'firstName' and 'lastName' that are not automatically mapped.</span>
1086+
<span class="token generic-method"><span class="token function">Field</span><span class="token generic class-name"><span class="token punctuation">&lt;</span>NonNullGraphType<span class="token punctuation">&lt;</span>StringGraphType<span class="token punctuation">></span><span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"firstName"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">NoClrMapping</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
1087+
<span class="token generic-method"><span class="token function">Field</span><span class="token generic class-name"><span class="token punctuation">&lt;</span>NonNullGraphType<span class="token punctuation">&lt;</span>StringGraphType<span class="token punctuation">></span><span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"lastName"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">NoClrMapping</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
1088+
1089+
<span class="token comment">// Define the 'age' field which is automatically mapped to Person.Age.</span>
1090+
<span class="token function">Field</span><span class="token punctuation">(</span>x <span class="token operator">=></span> x<span class="token punctuation">.</span>Age<span class="token punctuation">)</span><span class="token punctuation">;</span>
1091+
<span class="token punctuation">}</span>
1092+
1093+
<span class="token keyword">public</span> <span class="token keyword">override</span> <span class="token return-type class-name"><span class="token keyword">object</span></span> <span class="token function">ParseDictionary</span><span class="token punctuation">(</span><span class="token class-name">IDictionary<span class="token punctuation">&lt;</span><span class="token keyword">string</span><span class="token punctuation">,</span> <span class="token keyword">object</span><span class="token punctuation">?</span><span class="token punctuation">></span></span> <span class="token keyword">value</span><span class="token punctuation">)</span>
1094+
<span class="token punctuation">{</span>
1095+
<span class="token comment">// Use base.ParseDictionary to handle automatic mapping (e.g., Age).</span>
1096+
<span class="token class-name"><span class="token keyword">var</span></span> person <span class="token operator">=</span> <span class="token punctuation">(</span>Person<span class="token punctuation">)</span><span class="token keyword">base</span><span class="token punctuation">.</span><span class="token function">ParseDictionary</span><span class="token punctuation">(</span><span class="token keyword">value</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
1097+
1098+
<span class="token comment">// Manually combine firstName and lastName into FullName.</span>
1099+
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">value</span><span class="token punctuation">.</span><span class="token function">TryGetValue</span><span class="token punctuation">(</span><span class="token string">"firstName"</span><span class="token punctuation">,</span> <span class="token keyword">out</span> <span class="token class-name"><span class="token keyword">var</span></span> firstNameObj<span class="token punctuation">)</span> <span class="token operator">&amp;&amp;</span> firstNameObj <span class="token keyword">is</span> <span class="token class-name"><span class="token keyword">string</span></span> firstName <span class="token operator">&amp;&amp;</span>
1100+
<span class="token keyword">value</span><span class="token punctuation">.</span><span class="token function">TryGetValue</span><span class="token punctuation">(</span><span class="token string">"lastName"</span><span class="token punctuation">,</span> <span class="token keyword">out</span> <span class="token class-name"><span class="token keyword">var</span></span> lastNameObj<span class="token punctuation">)</span> <span class="token operator">&amp;&amp;</span> lastNameObj <span class="token keyword">is</span> <span class="token class-name"><span class="token keyword">string</span></span> lastName<span class="token punctuation">)</span>
1101+
<span class="token punctuation">{</span>
1102+
person<span class="token punctuation">.</span>FullName <span class="token operator">=</span> <span class="token interpolation-string"><span class="token string">$"</span><span class="token interpolation"><span class="token punctuation">{</span><span class="token expression language-csharp">firstName</span><span class="token punctuation">}</span></span><span class="token string"> </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token expression language-csharp">lastName</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">;</span>
1103+
<span class="token punctuation">}</span>
1104+
1105+
<span class="token keyword">return</span> person<span class="token punctuation">;</span>
1106+
<span class="token punctuation">}</span>
1107+
<span class="token punctuation">}</span></code></pre></div>
1108+
<p>In this example, the input object defines three fields: <code class="language-text">firstName</code>, <code class="language-text">lastName</code>, and <code class="language-text">age</code>.
1109+
The <code class="language-text">firstName</code> and <code class="language-text">lastName</code> fields are marked with <code class="language-text">NoClrMapping()</code> so that they are not
1110+
automatically bound to any CLR properties. Instead, the overridden <code class="language-text">ParseDictionary</code> method
1111+
combines these two fields into the <code class="language-text">FullName</code> property of the <code class="language-text">Person</code> CLR type. Meanwhile,
1112+
the <code class="language-text">Age</code> field is processed via the standard mapping mechanism by calling <code class="language-text">base.ParseDictionary</code>.
1113+
This approach allows you to seamlessly mix automatic and custom binding, providing greater
1114+
flexibility in how your input objects are processed and mapped.</p>
10631115
<h2 id="breaking-changes" style="position:relative;"><a href="#breaking-changes" aria-label="breaking changes permalink" class="anchor before"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Breaking Changes</h2>
10641116
<h3 id="1-query-type-is-required" style="position:relative;"><a href="#1-query-type-is-required" aria-label="1 query type is required permalink" class="anchor before"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>1. Query type is required</h3>
10651117
<p>Pursuant to the GraphQL specification, a query type is required for any schema.

page-data/docs/migrations/migration8/page-data.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)