2017-11-10 12 views
0

私のプロジェクト(Entity Frameworkではなく)でDevartのLinqをSQLに使用しています。 Query<T>、またはExecuteQuery<T>でデータベースから選択してください。ただし、Tは意図的にパブリックなパラメータのないコンストラクタを持っていません。 Tの新しいインスタンスをどうすれば上書きすることができますか?例えば、ある時点でAutoMapper.Profileのインスタンスを与えるとしますか?または、Func<T>Tインスタンスを作成してから、その値をDBの値で上書きしますか?Devart.Data.Linq.DataContext.Queryを使用してクエリを実行するときの構造を指定します。<T>

using(var DC = new SomeDevartDataContextBaseDerivative()) 
{ 
    // exception because parameterless constructor 
    var FM = DC.ExecuteQuery<SomeTypeWithoutParameterlessConstructor>("Select 1 as Id"); 
    return FM; 
} 
+0

私は、たとえば、同じパラメータを持つSomeTypeWithoutParameterlessConstructor2型を作成し、それをマップするよりもパラメータのないコンストラクタを使用することができます。 – ntohl

答えて

0

パブリックパラメータなしコンストラクタなしで型を渡す方法はありません。

+0

実装されているといいでしょう。 – ntohl

+0

パラメータを持つコンストラクタは、渡された値をチェックし、値が無効な場合にエラーを生成するロジックを実装する必要があります。 null(参照型)と0(構造体)を渡すことは普遍的な解決策ではありませんが、これはほとんどの場合機能しません。それが実装されていない理由です。 – Devart

+0

私は、建設ロジックを実装することができます。 AutoMapperは、ここでは 'ConstructServicesUsing'と同じように:https://github.com/AutoMapper/AutoMapper/wiki/Dependency-injection。またはMVC 5は 'DependencyResolver.SetResolver'で行います。したがって、nullを渡すことは決して起こりません。渡された値のチェックは以前と同じです。ユーザーはそれを世話する必要があります。 – ntohl

関連する問題