ComplexObject Class
Base class for complex types.
System.Data.Objects.DataClasses.StructuralObject
System.Data.Objects.DataClasses.ComplexObject
Assembly: System.Data.Entity (in System.Data.Entity.dll)
The ComplexObject type exposes the following members.
| Name | Description | |
|---|---|---|
![]() | Equals(Object) | Determines whether the specified Object is equal to the current Object. (Inherited from Object.) |
![]() | Finalize | Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.) |
![]() | GetHashCode | Serves as a hash function for a particular type. (Inherited from Object.) |
![]() | GetType | Gets the Type of the current instance. (Inherited from Object.) |
![]() | GetValidValue<T>(T, String, Boolean, Boolean) | Returns a complex type for the specified property. (Inherited from StructuralObject.) |
![]() | MemberwiseClone | Creates a shallow copy of the current Object. (Inherited from Object.) |
![]() | OnPropertyChanged | Raises the PropertyChanged event. (Inherited from StructuralObject.) |
![]() | OnPropertyChanging | Raises the PropertyChanging event. (Inherited from StructuralObject.) |
![]() | ReportPropertyChanged | Notifies the change tracker that a property of a complex object has changed. (Overrides StructuralObject.ReportPropertyChanged(String).) |
![]() | ReportPropertyChanging | Notifies the change tracker that a property change is pending on a complex object. (Overrides StructuralObject.ReportPropertyChanging(String).) |
![]() | SetValidValue<T>(T, T, String) | Sets a complex object for the specified property. (Inherited from StructuralObject.) |
![]() | ToString | Returns a string that represents the current object. (Inherited from Object.) |
| Name | Description | |
|---|---|---|
![]() | PropertyChanged | Occurs when a property value has changed. (Inherited from StructuralObject.) |
![]() | PropertyChanging | Occurs when a property value change is a pending. (Inherited from StructuralObject.) |
ComplexObject implements the basic functionality for complex types. For more information, see Complex Type Objects (Entity Framework).
When implementing custom data classes with a conceptual model, we recommend that your data classes that represent complex types inherit from ComplexObject. For more information, see Customizing Objects (Entity Framework).
A complex type can be a property of an entity type or of another complex type.
Complex types are returned by non-scalar properties of entity types. This enables scalar properties to be organized within entities. Like entities, complex types consist of scalar properties or other complex type properties. A complex type cannot be used without an associated entity type. Because complex types do not have keys, complex type objects cannot be managed without an associated entity type. For more information, see Complex Type Objects (Entity Framework).
In the following example, the custom data class OrderInfo inherits from ComplexObject and is mapped to the OrderInfo complex type defined in the conceptual model.
using System; using System.Data.SqlTypes; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.Objects.DataClasses; using System.Data.Metadata.Edm; using Microsoft.Samples.Edm; [assembly: EdmSchemaAttribute()] [assembly: EdmRelationshipAttribute("Microsoft.Samples.Edm", "FK_LineItem_Order_OrderId", "Order", RelationshipMultiplicity.One, typeof(Order),"LineItem", RelationshipMultiplicity.Many, typeof(LineItem))] namespace Microsoft.Samples.Edm { [EdmEntityTypeAttribute(NamespaceName="Microsoft.Samples.Edm",Name="Order")] public class Order : EntityObject { // Define private property variables. private int _orderId; private DateTime _orderDate; private DateTime _dueDate; private DateTime _shipDate; private byte _status; private int _customer; private decimal _subTotal; private decimal _tax; private decimal _freight; private decimal _totalDue; private OrderInfo _ExtendedInfo; // Public properties of the Order object. [EdmScalarPropertyAttribute(EntityKeyProperty = true, IsNullable = false)] public int OrderId { get { return _orderId; } set { ReportPropertyChanging("OrderId"); _orderId = value; ReportPropertyChanged("OrderId"); } } // Navigation property that returns a collection of line items. [EdmRelationshipNavigationPropertyAttribute("Microsoft.Samples.Edm","FK_LineItem_Order_OrderId", "LineItem")] public System.Data.Objects.DataClasses.EntityCollection<LineItem> LineItem { get { return ((IEntityWithRelationships)(this)).RelationshipManager. GetRelatedCollection<LineItem>("FK_LineItem_Order_OrderId", "LineItem"); } } [EdmScalarPropertyAttribute(IsNullable = false)] public DateTime OrderDate { get { return _orderDate; } set { ReportPropertyChanging("OrderDate"); _orderDate = value; ReportPropertyChanged("OrderDate"); } } [EdmScalarPropertyAttribute(IsNullable = false)] public DateTime DueDate { get { return _dueDate; } set { ReportPropertyChanging("DueDate"); _dueDate = value; ReportPropertyChanged("DueDate"); } } [EdmScalarPropertyAttribute()] public DateTime ShipDate { get { return _shipDate; } set { ReportPropertyChanging("ShipDate"); _shipDate = value; ReportPropertyChanged("ShipDate"); } } [EdmScalarPropertyAttribute(IsNullable = false)] public byte Status { get { return _status; } set { if (_status != value) { ReportPropertyChanging("Status"); _status = value; ReportPropertyChanged("Status"); } } } [EdmScalarPropertyAttribute(IsNullable = false)] public int Customer { get { return _customer; } set { ReportPropertyChanging("Customer"); _customer = value; ReportPropertyChanged("Customer"); } } [EdmScalarPropertyAttribute(IsNullable = false)] public decimal SubTotal { get { return _subTotal; } set { if (_subTotal != value) { // Validate the value before setting it. if (value < 0) { throw new ApplicationException(string.Format( Properties.Resources.propertyNotValidNegative, new string[2] { value.ToString(), "SubTotal" })); } ReportPropertyChanging("SubTotal"); _subTotal = value; ReportPropertyChanged("SubTotal"); // Recalculate the order total. CalculateOrderTotal(); } } } [EdmScalarPropertyAttribute(IsNullable = false)] public decimal TaxAmt { get { return _tax; } set { // Validate the value before setting it. if (value < 0) { throw new ApplicationException(string.Format( Properties.Resources.propertyNotValidNegative, new string[2] { value.ToString(), "Tax" })); } ReportPropertyChanging("TaxAmt"); _tax = value; ReportPropertyChanged("TaxAmt"); // Recalculate the order total. CalculateOrderTotal(); } } [EdmScalarPropertyAttribute(IsNullable = false)] public decimal Freight { get { return _freight; } set { if (_freight != value) { // Validate the value before setting it. if (value < 0) { throw new ApplicationException(string.Format( Properties.Resources.propertyNotValidNegative, new string[2] { value.ToString(), "Freight" })); } ReportPropertyChanging("Freight"); _freight = value; ReportPropertyChanging("Freight"); // Recalculate the order total. CalculateOrderTotal(); } } } public decimal TotalDue { get { return _totalDue; } } [EdmComplexPropertyAttribute()] public OrderInfo ExtendedInfo { get { return _ExtendedInfo; } set { this.ReportPropertyChanging("ExtendedInfo"); _ExtendedInfo = value; this.ReportPropertyChanged("ExtendedInfo"); } } private void CalculateOrderTotal() { // Update the total due as a sum of the other cost properties. _totalDue = _subTotal + _tax + _freight; } } [EdmComplexTypeAttribute(NamespaceName = "Microsoft.Samples.Edm", Name = "OrderInfo")] public partial class OrderInfo : ComplexObject { private string _orderNumber; private string _purchaseOrder; private string _accountNumber; private string _comment; [EdmScalarPropertyAttribute(IsNullable = false)] public string OrderNumber { get { return _orderNumber; } set { // Validate the value before setting it. if (value.Length > 25) { throw new ApplicationException(string.Format( Properties.Resources.propertyNotValidString, new string[3] { value, "OrderNumber", "25" })); } ReportPropertyChanging("OrderNumber"); _orderNumber = value; ReportPropertyChanged("OrderNumber"); } } [EdmScalarPropertyAttribute()] public string PurchaseOrder { get { return _purchaseOrder; } set { // Validate the value before setting it. if ((value != null) && value.Length > 25) { throw new ApplicationException(string.Format( Properties.Resources.propertyNotValidString, new string[3] { value, "PurchaseOrder", "25" })); } if (_purchaseOrder != value) { ReportPropertyChanging("PurchaseOrder"); _purchaseOrder = value; ReportPropertyChanged("PurchaseOrder"); } } } [EdmScalarPropertyAttribute()] public string AccountNumber { get { return _accountNumber; } set { // Validate the value before setting it. if ((value != null) && value.Length > 15) { throw new ApplicationException(string.Format( Properties.Resources.propertyNotValidString, new string[3] { value, "AccountNumber", "15" })); } ReportPropertyChanging("AccountNumber"); _accountNumber = value; ReportPropertyChanged("AccountNumber"); } } [EdmScalarPropertyAttribute()] public string Comment { get { return _comment; } set { // Validate the value before setting it. if ((value != null) && value.Length > 128) { throw new ApplicationException(string.Format( Properties.Resources.propertyNotValidString, new string[3] { value, "Comment", "128" })); } if (_comment != value) { ReportPropertyChanging("Comment"); _comment = value; ReportPropertyChanged("Comment"); } } } } [EdmEntityTypeAttribute(NamespaceName = "Microsoft.Samples.Edm", Name = "LineItem")] public class LineItem : EntityObject { // Define private property variables. int _lineItemId; string _trackingNumber; short _quantity; int _product; decimal _price; decimal _discount; decimal _total; // Default constructor. public LineItem() { } // Defines a navigation property to the Order class. [EdmRelationshipNavigationPropertyAttribute("Microsoft.Samples.Edm", "FK_LineItem_Order_OrderId", "Order")] public Order Order { get { return ((IEntityWithRelationships)(this)).RelationshipManager. GetRelatedReference<Order>("FK_LineItem_Order_OrderId", "Order").Value; } set { ((IEntityWithRelationships)(this)).RelationshipManager. GetRelatedReference<Order>("FK_LineItem_Order_OrderId", "Order").Value = value; } } [EdmScalarPropertyAttribute(EntityKeyProperty = true, IsNullable = false)] public int LineItemId { get { return _lineItemId; } set { ReportPropertyChanging("LineItemId"); _lineItemId = value; ReportPropertyChanged("LineItemId"); } } [EdmScalarPropertyAttribute()] public string TrackingNumber { get { return _trackingNumber; } set { if (_trackingNumber != value) { // Validate the value before setting it. if (value.Length > 25) { throw new ApplicationException(string.Format( Properties.Resources.propertyNotValidString, new string[3] {value,"TrackingNumber", "25"})); } ReportPropertyChanging("TrackingNumber"); _trackingNumber = value; ReportPropertyChanged("TrackingNumber"); } } } [EdmScalarPropertyAttribute(IsNullable = false)] public short Quantity { get { return _quantity; } set { if (_quantity != value) { // Validate the value before setting it. if (value < 1) { throw new ApplicationException(string.Format( Properties.Resources.propertyNotValidNegative, new string[2] { value.ToString(), "Quantity" })); } ReportPropertyChanging("Quantity"); _quantity = value; ReportPropertyChanged("Quantity"); // Update the line total. CalculateLineTotal(); } } } [EdmScalarPropertyAttribute(IsNullable = false)] public int Product { get { return _product; } set { // Validate the value before setting it. if (value < 1) { throw new ApplicationException(string.Format( Properties.Resources.propertyNotValidNegative, new string[2] { value.ToString(), "Product" })); } ReportPropertyChanging("Product"); _product = value; ReportPropertyChanged("Product"); } } [EdmScalarPropertyAttribute(IsNullable = false)] public decimal Price { get { return _price; } set { if (_price != value) { // Validate the value before setting it. if (value < 0) { throw new ApplicationException(string.Format( Properties.Resources.propertyNotValidNegative, new string[2] { value.ToString(), "Price" })); } ReportPropertyChanging("Price"); _price = value; ReportPropertyChanged("Price"); // Update the line total. CalculateLineTotal(); } } } [EdmScalarPropertyAttribute(IsNullable = false)] public decimal Discount { get { return _discount; } set { // Validate the value before setting it. if (value < 0) { throw new ApplicationException(string.Format( Properties.Resources.propertyNotValidNegative, new string[2] { value.ToString(), "Discount" })); } ReportPropertyChanging("Discount"); _discount = value; ReportPropertyChanged("Discount"); } } public decimal Total { get { return _total; } } private void CalculateLineTotal() { _total = (_quantity * (_price - _discount)); } } }
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
