3

すべての Entity Framework コードを含むクラス ライブラリがあります。

ASP.NET MVC プロジェクトを含むいくつかのサブプロジェクトを含むソリューションを開発しています。私のモデルは、ソリューション内の他のさまざまなプロジェクトから使用する必要があるため、別のアセンブリに分割されています。

ソリューションを 3 つの層に分けました。

1) `DAL` (Data Access Layer Entity Framework .EDMX) DATABASE First approach...
2) `Service` layer (will be calling DAL to get data from db....)
3) `UI` (which will be MVC 4 framework)

だから私のサービスプロジェクトでは、データアクセスDLLの参照を持っています

ASP.NET MVC プロジェクトでは、Service プロジェクトの参照があります

ただし、ASP.NET MVC の構築を開始しています。

コントローラーを追加しようとしましたが、DAL からモデル クラスを選択するとエラーが発生しました

Error 1 The type 'myproj_dal.requester' is defined in an assembly that is not referenced. You must add a reference to assembly 'myproj_dal, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. \issoa_ui\Controllers\RequesterController.cs

これが私のコントローラーです:

public ActionResult Index()
{
    issoa_service.RequesterService reqService = new issoa_service.RequesterService();
    var model = reqService.GetRequesters(); //**<<<ERROR**
    return View(model);
}

私の中には、Web.Config私が持っているものとまったく同じ接続文字列がありますDAL app.config.

これが私のRequesterService見た目です:

public class RequesterService
{   
    db_entities edmx = new db_entities();

    public IList<Requester> GetRequesters()
    {
        IList<Requester> model = edmx.Requester.ToList();
        return model;
    }
}

Model.edmx
>>>>>Model.tt
       >>>Requester.cs


//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace myproj_dal
{
    using System;
    using System.Collections.Generic;

    public partial class Requester
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string MiddleName { get; set; }
        public string LastName { get; set; }
        public string EmailAddress { get; set; }
    }
}

私の質問は:

1) 上記のエラーが表示されるのはなぜですか? DAL の参照を UI に追加する必要がありますか? はいの場合、疎結合の目的全体を無効にしています。

2) 正しい方法は何ですか。最善の基準に基づいて行動していない場合。

誰かが私を指摘したり、修正したり、私に叫んだり、ある種の説明にリダイレクトしたり、サンプルプロジェクトが役立つことはありますか?

4

1 に答える 1

3

Web プロジェクトから DAL を参照したくない場合は、エンティティ モデルを DAL から取り出して別のプロジェクトに配置する必要があります。

という名前のプロジェクトを作成し、MyProj.Entitiesそれを必要とするあらゆる場所 (つまり、他のすべてのプロジェクト) からこれを参照します。このプロジェクト内のputRequesterおよびその他のエンティティ クラス。

これで、Web プロジェクトを DAL と密結合する必要がなくなりましたが、それらの間でエンティティ クラスを共有できます。

于 2013-09-12T21:15:24.423 に答える