アーキテクチャに問題があります。論理層を物理層に分割しようとしていますが、少し問題があります。これが私が物事をセットアップしたい方法です:
- エンティティ-DLL。私のPOCOクラス。依存関係はありません。
- DAL-DLL。モデルとDbContextが含まれています。エンティティに依存します。
- BLL-DLL。CRUD関数が含まれています。DALとエンティティに依存します
- UI-Webサイトプロジェクト。BLLと話します。
私の問題は、BLLで次のようなことをすることです。
''' <summary>
''' The repository
''' </summary>
''' <remarks></remarks>
Private context As MyContext
''' <summary>
''' Instantiate the business layer
''' </summary>
''' <remarks></remarks>
Public Sub New()
context = New MyContext()
End Sub
''' <summary>
''' Insert a general retrieve into the database
''' </summary>
''' <param name="myEntity">The entity to insert</param>
''' <returns>The id of the entity added</returns>
''' <remarks></remarks>
Public Function Create(ByVal myEntity As myEntity) As String
Try
context.myEntity.Add(myEntity )
context.SaveChanges()
Catch ex As Exception
Throw ex
End Try
Return myEntity.id
End Function
しかし、エンティティでAddを呼び出すには、コンテキストがDbContextを継承しているため、EntityFramework.dllへの参照が必要です。リポジトリを作成せずにこれを回避する方法がわかりません。これは、抽象化の不要な追加レイヤーのように見えます。さらに、DbContextではtiは必要ないと思いました。
ここで何が欠けていますか?