New in DXperience 12.1

.NET Object-Relational Mapping Library

XPO Data Model Designer

Now you can start your application development from building the data model within a visual designer instead of code. The designer creates underlying the XPO classes automatically. An option to autocreate a model for existing database is also available.

XPO - Data Model Designer

Related Documentation: How to: Create a Business Model in the XPO Data Model Designer

Related Video Tutorial: XAF: Start from Building a Data Model Using the XPO Data Model Designer

XPO OData Service

XPO now ships with the integrated support of the Open Data Protocol V2 (OData). XPO OData Service uses XPO classes and LinqToXpo and fully complies with associated OData standards. Any OData-compatible client can connect to this service.

Single Aggregate Type

With the newly introduced Single aggregate, you can retrieve a specific object from the collection by a condition.

C#
VB.NET
XPView view = new XPView(session, typeof(Employees));
view.Criteria = CriteriaOperator.Parse("[keyrOrders>][^.EmployeeID = EmployeeID].Single() is not null");
view.AddProperty("OrderDate", "[<Orders>][^.EmployeeID = EmployeeID].Single(OrderDate)");
view.AddProperty("OrderRequiredDate", "[<Orders>][^.EmployeeID = EmployeeID].Single(RequiredDate)");
view.AddProperty("OrderFreight", "[<Orders>][^.EmployeeID = EmployeeID].Single(Freight)");

Support Objects Access in PersistentAlias with "Iif", "IsNull" and "Single" Functions

You can now use Iif and IsNull functions, object references, and Single aggregate types in persistent alias expressions.

C#
VB.NET
public class Order : XPObject {
    [PersistentAlias("Iif(MainCustomerIsOne, CustomerOne, CustomerTwo)")]
    public Person MainCustomer {
        get { return (Person)EvaluateAlias("MainCustomer"); }
    }
    [PersistentAlias("IsNull(CustomerOne, CustomerTwo)")]
    public Person NotNullCustomer {
        get { return (Person)EvaluateAlias("NotNullCustomer"); }
    }
    [PersistentAlias("[<Person>][Oid = ^.CustomerOne].Single()")]
    public Person CustomerOneBySingle {
        get { return (Person)EvaluateAlias("CustomerOneBySingle"); ; }
    }
    public bool MainCustomerIsOne {
        get { return mainCustomerIsOne; }
        set { SetPropertyValue("MainCustomerIsOne", ref mainCustomerIsOne, value); }
    }
    public Person CustomerOne {
        get { return customer1; }
        set { SetPropertyValue("CustomerOne", ref customer1, value); }
    }
    public Person CustomerTwo {
        get { return customer2; }
        set { SetPropertyValue("CustomerTwo", ref customer2, value); }
    }
    // ...
}

LINQ to XPO Improvements

LINQ to XPO now supports "joins" and complex select expressions.

1
2
3
54
55
56
57
58
59
60
More from DevExpress
Live Chat
Have a pre-sales question?
Need assistance with your evaluation?
We are here to help.
Chat is one of the many ways you can contact members of the DevExpress Team. We are available Monday-Friday between 7:30am and 4:30pm Pacific Time.
If you need additional product information, require pre-sales assistance, or want help with your order, write to us at info@devexpress.com or call us at
+1 (818) 844-3383.