2016-06-23 1 views
1

モデルにデータエンティティをマップするためにExpressmapperを使用しようとしています。ExpressMapper/EntityFreamework - このオブジェクトに対して定義されたパラメータのないコンストラクタはありません

エンティティをモデルに直接マッピングすると(両方が同じプロパティを持つ)、うまくいきます。

しかし、私はモデルにリンクされているエンティティをマッピングするならば、私はエラー

There was an error: System.MissingMethodException: No 
    parameterless constructor defined for this object. 

データベースの構造を取得しています:

enter image description here

ExpressMapper登録:次のように呼び出されます

Mapper.Register<DiscountDaysOfWeek, DiscountDaysOfWeekModel>() 
     .Member(dest => dest.DiscountDayId, src => src.DiscountDayId) 
     .Member(dest => dest.DiscountDaysOfWeekId, src => src.DiscountDaysOfWeekId) 
     .Member(dest => dest.DiscountId, src => src.DiscountId) 
     .Member(dest => dest.Discountday, src => src.DiscountDay.Day); 

を:

var disDays = discs.SelectMany(x => x.DiscountDaysOfWeeks) 
        .Map<IQueryable<DiscountDaysOfWeek>, IQueryable<DiscountDaysOfWeekModel>>(); 

呼び出し時にエラーメッセージが表示される。

DiscountDaysOfWeekModel:(EFによって生成される)

public class DiscountDaysOfWeekModel 
{ 
    public int DiscountDaysOfWeekId { get; set; } 
    public int DiscountId { get; set; } 
    public int DiscountDayId { get; set; } 
    public string Discountday { get; set; } 
} 

DiscountDayOfWeek

public partial class DiscountDaysOfWeek 
{ 
    public int DiscountDaysOfWeekId { get; set; } 
    public int DiscountId { get; set; } 
    public int DiscountDayId { get; set; } 

    public virtual DiscountDay DiscountDay { get; set; } 
    public virtual Discount Discount { get; set; } 
} 

(EFによって生成される)DiscountDay一作業

public partial class DiscountDay 
{ 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
    public DiscountDay() 
    { 
     this.DiscountDaysOfWeeks = new HashSet<DiscountDaysOfWeek>(); 
    } 

    public int DiscountDayId { get; set; } 
    public string Day { get; set; } 

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<DiscountDaysOfWeek> DiscountDaysOfWeeks { get; set; } 
} 

サンプル:以下の作業サンプルでモデルとエンティティは同じプロパティを持っています

Mapper.Register<DiscountPreventedPriceEnding, DiscountPreventedPriceEndingModel>(); 

var execPriceEndings = discs.SelectMany(x => x.DiscountPreventedPriceEndings) 
          .Map<IQueryable<DiscountPreventedPriceEnding>, IQueryable<DiscountPreventedPriceEndingModel>>(); 

ご協力いただければ幸いです。

ありがとうございます!

+0

この行は動作しません。マップ、IQueryable >(); IQueryableをマップできるかどうかの例を示してください。それをICollectionに変更できますか? –

+0

DiscountDaysOfWeekModelにはパラメータのないコンストラクタがありますか?関係するクラスを表示する。 –

+0

@SteveGreeneこんにちはスティーブ、私はクラスのコードを追加しました – Rocky

答えて

0

エンティティフレームワークでは、パラメータのないコンストラクタを使用してクラスをインスタンス化し、リフレクションを実行してクラスプロパティを生成します。パラメータを持つコンストラクタがある場合、デフォルトのパラメータのないコンストラクタは非表示になり、Entity Frameworkが使用するためには、それをEntityクラスに追加する必要があります。

しかし、私はモデルにリンクされているエンティティをマッピングする場合は、あなたの子エンティティは、パラメータなしのコンストラクタが欠落して遅延ロードされている場合、私はそれが子をインスタンス化しようとしたときにEFが失敗して、エラーに

を取得していますパラメータのないコンストラクタを持たないエンティティ

注:パラメータのないコンストラクタはパブリックである必要はありません。

関連する問題