System\Data\Mapping\Update\Internal\Propagator.JoinPropagator.cs (142)
94private static readonly Dictionary<Ops, Ops> s_innerJoinInsertRules;
95private static readonly Dictionary<Ops, Ops> s_innerJoinDeleteRules;
96private static readonly Dictionary<Ops, Ops> s_leftOuterJoinInsertRules;
97private static readonly Dictionary<Ops, Ops> s_leftOuterJoinDeleteRules;
102private readonly Dictionary<Ops, Ops> m_insertRules;
103private readonly Dictionary<Ops, Ops> m_deleteRules;
118s_innerJoinInsertRules = new Dictionary<Ops,Ops>(EqualityComparer<Ops>.Default);
119s_innerJoinDeleteRules = new Dictionary<Ops, Ops>(EqualityComparer<Ops>.Default);
120s_leftOuterJoinInsertRules = new Dictionary<Ops, Ops>(EqualityComparer<Ops>.Default);
121s_leftOuterJoinDeleteRules = new Dictionary<Ops, Ops>(EqualityComparer<Ops>.Default);
130InitializeRule(Ops.LeftUpdate | Ops.RightUpdate,
131Ops.LeftInsertJoinRightInsert,
132Ops.LeftDeleteJoinRightDelete,
133Ops.LeftInsertJoinRightInsert,
134Ops.LeftDeleteJoinRightDelete);
136InitializeRule(Ops.LeftDelete | Ops.RightDelete,
137Ops.Nothing,
138Ops.LeftDeleteJoinRightDelete,
139Ops.Nothing,
140Ops.LeftDeleteJoinRightDelete);
142InitializeRule(Ops.LeftInsert | Ops.RightInsert,
143Ops.LeftInsertJoinRightInsert,
144Ops.Nothing,
145Ops.LeftInsertJoinRightInsert,
146Ops.Nothing);
148InitializeRule(Ops.LeftUpdate,
149Ops.LeftInsertUnknownExtended,
150Ops.LeftDeleteUnknownExtended,
151Ops.LeftInsertUnknownExtended,
152Ops.LeftDeleteUnknownExtended);
154InitializeRule(Ops.RightUpdate,
155Ops.RightInsertUnknownExtended,
156Ops.RightDeleteUnknownExtended,
157Ops.RightInsertUnknownExtended,
158Ops.RightDeleteUnknownExtended);
160InitializeRule(Ops.LeftUpdate | Ops.RightDelete,
161Ops.Unsupported,
162Ops.Unsupported,
163Ops.LeftInsertNullModifiedExtended,
164Ops.LeftDeleteJoinRightDelete);
166InitializeRule(Ops.LeftUpdate | Ops.RightInsert,
167Ops.Unsupported,
168Ops.Unsupported,
169Ops.LeftInsertJoinRightInsert,
170Ops.LeftDeleteNullModifiedExtended);
172InitializeRule(Ops.LeftDelete,
173Ops.Unsupported,
174Ops.Unsupported,
175Ops.Nothing,
176Ops.LeftDeleteNullPreserveExtended);
178InitializeRule(Ops.LeftInsert,
179Ops.Unsupported,
180Ops.Unsupported,
181Ops.LeftInsertNullModifiedExtended,
182Ops.Nothing);
184InitializeRule(Ops.RightDelete,
185Ops.Unsupported,
186Ops.Unsupported,
187Ops.LeftUnknownNullModifiedExtended,
188Ops.RightDeleteUnknownExtended);
190InitializeRule(Ops.RightInsert,
191Ops.Unsupported,
192Ops.Unsupported,
193Ops.RightInsertUnknownExtended,
194Ops.LeftUnknownNullModifiedExtended);
196InitializeRule(Ops.LeftDelete | Ops.RightUpdate,
197Ops.Unsupported,
198Ops.Unsupported,
199Ops.Unsupported,
200Ops.Unsupported);
202InitializeRule(Ops.LeftDelete | Ops.RightInsert,
203Ops.Unsupported,
204Ops.Unsupported,
205Ops.Unsupported,
206Ops.Unsupported);
208InitializeRule(Ops.LeftInsert | Ops.RightUpdate,
209Ops.Unsupported,
210Ops.Unsupported,
211Ops.Unsupported,
212Ops.Unsupported);
214InitializeRule(Ops.LeftInsert | Ops.RightDelete,
215Ops.Unsupported,
216Ops.Unsupported,
217Ops.Unsupported,
218Ops.Unsupported);
230private static void InitializeRule(Ops input, Ops joinInsert, Ops joinDelete, Ops lojInsert, Ops lojDelete)
240(Ops.LeftInsert | Ops.LeftDelete | Ops.RightInsert | Ops.RightDelete)) & (~input)) == Ops.Nothing,
244Debug.Assert(((joinInsert ^ joinDelete) & (Ops.LeftUnknown | Ops.RightUnknown)) == Ops.Nothing &&
245((lojInsert ^ lojDelete) & (Ops.LeftUnknown | Ops.RightUnknown)) == Ops.Nothing,
296Ops input = Ops.Nothing;
298if (leftInserts.TryGetValue(key, out leftInsert)) { input |= Ops.LeftInsert; }
299if (leftDeletes.TryGetValue(key, out leftDelete)) { input |= Ops.LeftDelete; }
300if (rightInserts.TryGetValue(key, out rightInsert)) { input |= Ops.RightInsert; }
301if (rightDeletes.TryGetValue(key, out rightDelete)) { input |= Ops.RightDelete; }
304Ops insertRule = m_insertRules[input];
305Ops deleteRule = m_deleteRules[input];
307if (Ops.Unsupported == insertRule || Ops.Unsupported == deleteRule)
338if (0 != (Ops.LeftUnknown & insertRule))
342if (0 != (Ops.LeftUnknown & deleteRule))
346if (0 != (Ops.RightNullModified & insertRule))
350else if (0 != (Ops.RightNullPreserve & insertRule))
354else if (0 != (Ops.RightUnknown & insertRule))
359if (0 != (Ops.RightNullModified & deleteRule))
363else if (0 != (Ops.RightNullPreserve & deleteRule))
367else if (0 != (Ops.RightUnknown & deleteRule))