2

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
    // ...
    // ...
    // ...
}
4

0 に答える 0