これが初心者の質問である場合は申し訳ありません。しかし、最近、asp mvc アプリケーション用のリポジトリを構築しようとしましたが、いくつかのテーブルに参加する必要があることに気付きました。新しい ModelView を構築する必要があります。何度も何度も別のビューに。
結合ステートメントで実行するたびに、これを行う必要がありますか? または私の設計データベースが間違っていますか?ありがとう。
これが初心者の質問である場合は申し訳ありません。しかし、最近、asp mvc アプリケーション用のリポジトリを構築しようとしましたが、いくつかのテーブルに参加する必要があることに気付きました。新しい ModelView を構築する必要があります。何度も何度も別のビューに。
結合ステートメントで実行するたびに、これを行う必要がありますか? または私の設計データベースが間違っていますか?ありがとう。
1 つのメイン モデルに必要なすべてのフィールドとサブ モデルを含めることができ、クエリの異なるサブセットを選択するたびに、このメイン モデルを使用します。鉱山の汎用関数の例:-
public List<T> IncludeMultipleWithWhere(Expression<Func<T, bool>> predicate, params Expression<Func<T, object>>[] includes, Expression<Func<T, T>> select=null)
{
IQueryable<T> itemWithIncludes = dbContext.Set<T>() as IQueryable<T>;
try
{
if (select != null)
{
itemWithIncludes = includes.Aggregate(itemWithIncludes,
(current, include) => current.Include(include)).Where(predicate).Select(select);
}
else
{
return dbContext.Set<T>().Where(predicate);
}//end if-else
}
catch (Exception ex)
{
Logger.Error("Error", ex);
}
finally { }
return itemWithIncludes.ToList();
}
呼び出し関数は、メイン モデルを T として渡し、異なる選択式を渡すことができます。例:-
Expression<Func<CRM_RelationTbl, bool>> whereCond1 = (x) => x.intCRM == 0;
Expression<Func<CRM_RelationTbl, object>>[] includeMulti = { n => n.promotion.partners, n => n.program, n => n.campaign };
System.Linq.Expressions.Expression<Func<CRM_RelationTbl,CRM_RelationTbl>> select = u => new CRM_RelationTbl
{
intCat = u.intCat,
intCatRef=u.intCatRef,
varCatRef = u.varCatRef,
nvarDesc =u.nvarDesc
};
serviceRelation.IncludeMultipleWithWhere(whereCond1, includeMulti,select)