I am trying to extend 2 entities and am getting an error "specified cast is not valid".
MyPurchaseEntity p = new MyPurchaseEntity(34);
IPrefetchPath2 prefetchPath = new PrefetchPath2((int)EntityType.PurchaseEntity);
prefetchPath.Add(MyPurchaseEntity.PrefetchPathPurchaseItems);
prefetchPath.Add(MyPurchaseEntity.PrefetchPathVendor);
using(DataAccessAdapter adapter = new DataAccessAdapter())
{
adapter.FetchEntity(p,prefetchPath);
}
***error**** decimal amount = ((MyPurchaseItemsEntity)p.PurchaseItems[0]).ItemTotal;
My extended entities are as below. Any idea where I am going wrong?
public class MyPurchaseEntity:PurchaseEntity
{
public MyPurchaseEntity() : base()
{
base.PurchaseItems.EntityFactoryToUse = new MyPurchaseItemsEntityFactory();
}
public MyPurchaseEntity(System.Int32 id) : base(id)
{
base.PurchaseItems.EntityFactoryToUse = new MyPurchaseItemsEntityFactory();
}
public MyPurchaseEntity(IEntityFields2 fields) : base(fields)
{
base.PurchaseItems.EntityFactoryToUse = new MyPurchaseItemsEntityFactory();
}
[TypeContained(typeof(MyPurchaseItemsEntity))]
public override Reqlog.DAL.HelperClasses.EntityCollection PurchaseItems
{
get { return base.PurchaseItems; }
}
private decimal GetOrderTotal()
{
decimal total = 0;
if (this.PurchaseItems.Count > 0)
{
foreach (MyPurchaseItemsEntity _item in base.PurchaseItems)
{
total += _item.ItemTotal;
}
}
return total;
}
public decimal OrderTotal
{
get { return this.GetOrderTotal(); }
}
}
public class MyPurchaseEntityFactory: PurchaseEntityFactory
{
public MyPurchaseEntityFactory()
{
}
public override IEntity2 Create()
{
return new MyPurchaseEntity();
}
public override IEntity2 Create(IEntityFields2 fields)
{
return new MyPurchaseEntity(fields);
}
}
public class MyPurchaseItemsEntity : PurchaseItemsEntity
{
public MyPurchaseItemsEntity() : base()
{
}
public MyPurchaseItemsEntity(System.Int32 purchaseId, System.Int16 itemId) : base(purchaseId,itemId)
{
}
public MyPurchaseItemsEntity(IEntityFields2 fields) : base(fields)
{
}
public MyPurchaseItemsEntity(PurchaseItemsValidator validator) : base(validator)
{
}
public MyPurchaseItemsEntity(System.Int32 purchaseId, System.Int16 itemId, PurchaseItemsValidator validator) : base(purchaseId, itemId, validator)
{
}
public MyPurchaseItemsEntity(SerializationInfo info, StreamingContext context) : base(info, context)
{
}
private decimal GetItemTotal()
{
//initialization
decimal orderQty = base.TestOriginalFieldValueForNull(PurchaseItemsFieldIndex.Ordered) ? 0 : base.Ordered;
decimal recvQty = base.TestOriginalFieldValueForNull(PurchaseItemsFieldIndex.Received) ? 0 : base.Received;
decimal unitPrice = base.TestOriginalFieldValueForNull(PurchaseItemsFieldIndex.UnitPrice) ? 0 : base.UnitPrice;
//getting the total
if (unitPrice == 0)
return 0;
if (recvQty != 0)
return (recvQty * unitPrice);
if (orderQty != 0)
return (orderQty * unitPrice);
return 0;
}
public decimal ItemTotal
{
get { return this.GetItemTotal(); }
}
}
public class MyPurchaseItemsEntityFactory: PurchaseItemsEntityFactory
{
public MyPurchaseItemsEntityFactory()
{
}
public override IEntity2 Create()
{
return new MyPurchaseItemsEntity();
}
public override IEntity2 Create(IEntityFields2 fields)
{
return new MyPurchaseItemsEntity(fields);
}
}