1

次のようにレイヤーを分離しています。

UI - Web アプリ => BLL とエンティティの参照

BLL - ビジネス ロジック (検証) => 参照 DAL とエンティティ

エンティティ - データキャリー (POCO) => 参照なし

DAL - データ コンテキスト EDMX => 参照なし

これは完全な分離を使用した最初のプロジェクトであるため、非常に基本的な質問があります。オブジェクト @ UI レベルの EntityState (Added/Modified/Deleted) を設定したい場合、どうすればよいですか。上記の構造では、DataContextにアクセスできないためです。

エンティティの状態を設定することを知っている限り、データ コンテキストは必須です。

SOに関する多くの質問を読みましたが、この疑問を明確にするものはありませんでした。もう 1 つの方法は、カスタム State プロパティ @ Entities レベルを維持することです。

datacontext は DAL に制限する必要があることを読みました。EntityState を @BLL/UI に設定するのは悪い習慣ですか?

私はこの種のアーキテクチャで EF を初めて使用します。助けてください。

私は次のような質問をしましたが、明確になりませんでした。おそらく、SOC に関する知識が不足していることが原因である可能性があります。

1. DataContext を作成するレイヤーはどれですか?

2.サービス層で DbContext オブジェクトを参照してはいけないのはなぜですか?

3. Entity Framework / DbContext が DAL / リポジトリである場合、3 層アーキテクチャのどこに収まりますか?

4.Entity Frameworkとレイヤー分離

4. DbContext の外部で変更されたエンティティを更新する方法は?

編集 1: 私がまだ懸念していることの 1 つは、EntityState を設定するためだけに、DAL でオブジェクト階層を再度ループすることです。私はかなりネストされた階層を持っています。フラットな構造で同じことをしなければならない場合は、オブジェクトが埋められる UI で一度設定する必要があり、それから context.savechanges() を呼び出すことができます。

しかし、ここではエンティティのダミーの状態プロパティを作成しました。これを @UI に設定し、後でそれを EntityState.Modified @DAL に変換できます。これは正しいアプローチですか?

4

1 に答える 1

2

あなただけがあなたに(間接的DALに)アクセスできるべきです。DataContextは、 に挿入されDataContextた によって作成/取得する必要があります。ファクトリ クラスのどこかに、以下を取得するメソッドが必要です。 ContextFactoryBaseRepositoryDataContext

public DataContext Get()
{
    return _dataContext ?? (dataContext = new DataContext());
}

リポジトリにUpdate(T entity)メソッドがあり、そこで状態を処理するとします。

public void Update(T entity)
{
    _dataContext.Entry(entity).State = EntityState.Modified;
}
于 2014-10-01T18:17:45.830 に答える