When I enabled Fody to autogenerate Catel Properties and then run my application, I receive a runtime error saying one of my Properties (which references another entity) is invalid:
Property 'Hedge' is invalid (not serializable?)
This happens in the constructor of my EntityBase, when I try to enable the LeanAndMeanModel flag. The referenced entity is null, which is valid since the hedge property is not required.
Here is the relevant code:
[DataContract]
public class EntityBase : ModelBase, IEntityBase
{
public EntityBase()
{
LeanAndMeanModel = true;
Id = ContextTools.GenerateComb();
}
[Column(Order = 0)]
[Required, Key, DataMember]
public Guid Id { get; set; }
// For Row Level Concurrency
[Column(Order = 2)]
[Timestamp, DataMember]
public Byte[] RowVersion { get; set; }
/// <summary>
/// Called after loading objects using Entity Framework
/// to improve performance and enable proper function
/// of Catel ModelBase features.
///
/// https://catelproject.atlassian.net/wiki/display/CTL/Using+ModelBase+as+base+for+entities
///
/// https://catelproject.atlassian.net/wiki/display/CTL/Performance+considerations
///
/// </summary>
public void PostLoadSetup()
{
IsDirty = false;
LeanAndMeanModel = false;
}
}
[DataContract]
public class TransactionalBase :EntityBase, ITransactionalBase
{
// Convenience field to make querying
// for specific rows easier on the Database Side
[Column(Order = 1), DataMember]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int RowNumber { get; set; }
}
[DataContract]
public class Trade : TransactionalBase, ITrade
{
// Foreign Key
[DataMember]
public Guid? HedgeId { get; set; }
// Navigation Property
[DataMember]
public Hedge Hedge { get; set; }
[DataMember, Required]
public DateTime TradeDate { get; set; }
[DataMember, Required]
public DateTime SettleDate { get; set; }
// More properties follow
// ...
// ...
// ...
}
[DataContract]
public class Hedge : TransactionalBase, IHedge
{
[DataMember, Required]
public DateTime HedgeDate { get; set; }
[DataMember, Required]
public DateTime SettleDate { get; set; }
[DataMember, Required]
public PurchaseType BuySell { get; set; }
// Navigation property
public virtual List<Trade> HedgedTrades { get; set; }
// More properties follow
// ...
// ...
// ...
}