Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ AddCore()

override void System.Data.DataRelationCollection.DataSetRelationCollection.AddCore ( DataRelation relation)
inlineprotectedvirtual

Reimplemented from System.Data.DataRelationCollection.

Definition at line 255 of file DataRelationCollection.cs.

256 {
257 base.AddCore(relation);
258 if (relation.ChildTable.DataSet != _dataSet || relation.ParentTable.DataSet != _dataSet)
259 {
260 throw ExceptionBuilder.ForeignRelation();
261 }
262 relation.CheckState();
263 if (relation.Nested)
264 {
265 relation.CheckNestedRelations();
266 }
267 if (relation._relationName.Length == 0)
268 {
269 relation._relationName = AssignName();
270 }
271 else
272 {
273 RegisterName(relation._relationName);
274 }
275 DataKey childKey = relation.ChildKey;
276 for (int i = 0; i < _relations.Count; i++)
277 {
278 if (childKey.ColumnsEqual(((DataRelation)_relations[i]).ChildKey) && relation.ParentKey.ColumnsEqual(((DataRelation)_relations[i]).ParentKey))
279 {
280 throw ExceptionBuilder.RelationAlreadyExists();
281 }
282 }
283 _relations.Add(relation);
284 ((DataTableRelationCollection)relation.ParentTable.ChildRelations).Add(relation);
285 ((DataTableRelationCollection)relation.ChildTable.ParentRelations).Add(relation);
286 relation.SetDataSet(_dataSet);
287 relation.ChildKey.GetSortIndex().AddRef();
288 if (relation.Nested)
289 {
290 relation.ChildTable.CacheNestedParent();
291 }
292 ForeignKeyConstraint foreignKeyConstraint = relation.ChildTable.Constraints.FindForeignKeyConstraint(relation.ParentColumnsReference, relation.ChildColumnsReference);
293 if (relation._createConstraints && foreignKeyConstraint == null)
294 {
295 relation.ChildTable.Constraints.Add(foreignKeyConstraint = new ForeignKeyConstraint(relation.ParentColumnsReference, relation.ChildColumnsReference));
296 try
297 {
298 foreignKeyConstraint.ConstraintName = relation.RelationName;
299 }
300 catch (Exception e) when (ADP.IsCatchableExceptionType(e))
301 {
302 ExceptionBuilder.TraceExceptionWithoutRethrow(e);
303 }
304 }
305 UniqueConstraint parentKeyConstraint = relation.ParentTable.Constraints.FindKeyConstraint(relation.ParentColumnsReference);
306 relation.SetParentKeyConstraint(parentKeyConstraint);
307 relation.SetChildKeyConstraint(foreignKeyConstraint);
308 }
virtual int Add(object? value)
static bool IsCatchableExceptionType(Exception e)
Definition ADP.cs:790

References System.Data.DataRelation._createConstraints, System.Data.DataRelationCollection.DataSetRelationCollection._dataSet, System.Data.DataRelation._relationName, System.Data.DataRelationCollection.DataSetRelationCollection._relations, System.Data.ConstraintCollection.Add(), System.Collections.ArrayList.Add(), System.Data.Index.AddRef(), System.Data.DataRelationCollection.AssignName(), System.Data.DataTable.CacheNestedParent(), System.Data.DataRelation.CheckNestedRelations(), System.Data.DataRelation.CheckState(), System.Data.DataRelation.ChildColumnsReference, System.Data.DataRelation.ChildKey, System.Data.DataTable.ChildRelations, System.Data.DataRelation.ChildTable, System.Data.DataKey.ColumnsEqual(), System.Data.DataTable.Constraints, System.Collections.ArrayList.Count, System.Data.DataTable.DataSet, System.Data.ConstraintCollection.FindForeignKeyConstraint(), System.Data.ConstraintCollection.FindKeyConstraint(), System.Data.ExceptionBuilder.ForeignRelation(), System.Data.DataKey.GetSortIndex(), System.Data.Common.ADP.IsCatchableExceptionType(), System.Data.DataRelation.Nested, System.Data.DataRelation.ParentColumnsReference, System.Data.DataRelation.ParentKey, System.Data.DataTable.ParentRelations, System.Data.DataRelation.ParentTable, System.Data.DataRelationCollection.RegisterName(), System.Data.ExceptionBuilder.RelationAlreadyExists(), System.Data.DataRelation.RelationName, System.Data.DataRelation.SetChildKeyConstraint(), System.Data.DataRelation.SetDataSet(), System.Data.DataRelation.SetParentKeyConstraint(), and System.Data.ExceptionBuilder.TraceExceptionWithoutRethrow().