xpo-devexpress-dot-xpo-dot-xpcollection-dot-add-x28-system-dot-object-x29.md
Adds the specified persistent object to the XPCollection.
Namespace : DevExpress.Xpo
Assembly : DevExpress.Xpo.v25.2.dll
NuGet Package : DevExpress.Xpo
public int Add(
object newObject
)
Public Function Add(
newObject As Object
) As Integer
| Name | Type | Description |
|---|---|---|
| newObject | Object |
The persistent object to add to the collection.
|
| Type | Description |
|---|---|
| Int32 |
The zero-based index position at which the new element is inserted.
|
A persistent object is an object that implements the IXPSimpleObject interface or has the PersistentAttribute attribute.
You cannot add an object whose type is not the same or not inherited from the type specified by the XPCollection.ObjectClassInfo property. Also you cannot add the same object more than once. Doing so does not lead to an exception, however the object will not be added to the collection.
While the XPCollection is loading, it contains objects that match specific criteria. When you add an object, the collection does not check whether it matches the criteria or not.
The following example demonstrates how to implement a one-to-many relationship between persistent objects, so that child objects are considered a part of their owner (when an owner is deleted, its aggregated objects will be automatically deleted; similarly, when an object is saved its aggregated objects will also be saved).
A one-to-many relationship is set up using the AssociationAttribute attribute. The AggregatedAttribute attribute is used to implement aggregation.
In this example, a Person object can have multiple addresses that are stored in the Person.Addresses collection. Each address in this collection is represented by an Address persistent class. The Person.Addresses property is marked with the AssociationAttribute and AggregatedAttribute attributes.
If you run the code below as is, the console output will be:
7654 Amsterdam Ave, New York, NY 555 Harbor Way, Santa Barbara, CA
If you remove the Aggregated attribute, the output will change to:
7654 Amsterdam Ave, New York, NY 7654 Amsterdam Ave, New York, NY
using System;
using System.Collections.Generic;
using System.Linq;
using DevExpress.Xpo;
namespace ConsoleApplication1 {
public class Person : XPObject {
public string Name {
get { return fName; }
set { SetPropertyValue(nameof(Name), ref fName, value); }
}
string fName;
[Association("PersonAddresses"), Aggregated]
public XPCollection<Address> Addresses {
get { return GetCollection<Address>(nameof(Addresses)); }
}
}
public class Address : XPObject {
[Association("PersonAddresses")]
public Person Owner {
get { return fOwner; }
set { SetPropertyValue(nameof(Owner), ref fOwner, value); }
}
Person fOwner;
public string AddressInfo {
get { return fAddressInfo; }
set { SetPropertyValue(nameof(AddressInfo), ref fAddressInfo, value); }
}
string fAddressInfo;
}
class Program {
static void Main(string[] args) {
// Create a new instance of the Person class
Person person = new Person() { Name = "Andrew Smith" };
// Add an address for the person.
Address address = new Address() { AddressInfo = "7654 Amsterdam Ave, New York, NY" };
person.Addresses.Add(address);
// Save the created Person object. The contents of the Addresses collection will be saved as well.
person.Save();
// Reload the object to verify if changes were saved.
address.Reload();
Console.WriteLine(address.AddressInfo);
address.AddressInfo = "555 Harbor Way, Santa Barbara, CA";
person.Save();
// Reload the object to verify if changes were saved.
address.Reload();
Console.WriteLine(address.AddressInfo);
Console.ReadKey();
}
}
}
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports DevExpress.Xpo
Namespace ConsoleApplication1
Public Class Person
Inherits XPObject
Public Property Name() As String
Get
Return fName
End Get
Set(ByVal value as String)
SetPropertyValue(NameOf(Name), fName, value)
End Set
End Property
Private fName As String
<Association("PersonAddresses"), Aggregated> _
Public ReadOnly Property Addresses() As XPCollection(Of Address)
Get
Return GetCollection(Of Address)(NameOf(Addresses))
End Get
End Property
End Class
Public Class Address
Inherits XPObject
<Association("PersonAddresses")> _
Public Property Owner() As Person
Get
Return fOwner
End Get
Set(ByVal value as Person)
SetPropertyValue(NameOf(Owner), fOwner, value)
End Set
End Property
Private fOwner As Person
Public Property AddressInfo() As String
Get
Return fAddressInfo
End Get
Set(ByVal value as String)
SetPropertyValue(NameOf(AddressInfo), fAddressInfo, value)
End Set
End Property
Private fAddressInfo As String
End Class
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Create a new instance of the Person class
Dim person As New Person() With {.Name = "Andrew Smith"}
' Add an address for the person.
Dim address As New Address() With {.AddressInfo = "7654 Amsterdam Ave, New York, NY"}
person.Addresses.Add(address)
' Save the created Person object. The contents of the Addresses collection will be saved as well.
person.Save()
' Reload the object to verify if changes were saved.
address.Reload()
Console.WriteLine(address.AddressInfo)
address.AddressInfo = "555 Harbor Way, Santa Barbara, CA"
person.Save()
' Reload the object to verify if changes were saved.
address.Reload()
Console.WriteLine(address.AddressInfo)
Console.ReadKey()
End Sub
End Class
End Namespace
The following code snippets (auto-collected from DevExpress Examples) contain references to the Add(Object) method.
Note
The algorithm used to collect these code examples remains a work in progress. Accordingly, the links and snippets below may produce inaccurate results. If you encounter an issue with code examples below, please use the feedback form on this page to report the issue.
XPO_how-to-display-a-complex-propertys-subproperties-in-data-bound-controls-e742/CS/Form1.cs#L229
person.Save();
xpCollection1.Add(person);
XPO_how-to-use-xpo-with-a-web-service-e569/CS/TestApplication/Objects.cs#L97
DefaultAddress = new Address(employer.DefaultAddress);
Addresses.Add(DefaultAddress);
}
winforms-lookup-add-empty-item/CS/Form1.cs#L26
lookup.Save();
xpc2.Add(lookup);
}
XPO_how-to-display-a-complex-propertys-subproperties-in-data-bound-controls-e742/VB/Form1.vb#L219
person.Save()
xpCollection1.Add(person)
winforms-lookup-add-empty-item/VB/Form1.vb#L23
lookup.Save()
xpc2.Add(lookup)
End If
See Also