3

我有一个包含我所有实体框架代码的类库。

我正在开发一个涉及多个子项目的解决方案,包括一个 ASP.NET MVC 项目。我的模型已被分离到一个单独的程序集中,因为我需要从解决方案中的各种其他项目中使用它。

我将我的解决方案分为三层:

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 项目中,我有服务项目的参考

但是,我现在开始构建 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,并从需要它的任何地方(即所有其他项目)引用它。在这个项目中放置Requester和其他实体类。

现在您的 Web 项目不再需要与 DAL 紧密耦合,但您仍然可以在它们之间共享您的实体类。

于 2013-09-12T21:15:24.423 回答