Fody を有効にして Catel プロパティを自動生成し、アプリケーションを実行すると、(別のエンティティを参照する) プロパティの 1 つが無効であるというランタイム エラーが表示されます。
プロパティ 'Hedge' が無効です (シリアル化できませんか?)
これは、LeanAndMeanModel フラグを有効にしようとすると、EntityBase のコンストラクターで発生します。参照されたエンティティは null です。これは、ヘッジ プロパティが必要ないため有効です。
関連するコードは次のとおりです。
[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
// ...
// ...
// ...
}