Entity framework 独立类库组件中的MVC4模型(使用EF5)

Entity framework 独立类库组件中的MVC4模型(使用EF5),entity-framework,asp.net-mvc-4,entity-framework-5,ado.net-entity-data-model,Entity Framework,Asp.net Mvc 4,Entity Framework 5,Ado.net Entity Data Model,我有一个类库,其中包含我所有的实体框架代码 我正在开发一个涉及多个子项目的解决方案,包括一个ASP.NETMVC项目。我的模型已经被分离成一个单独的程序集,因为我需要从解决方案中的各种其他项目中使用它 我将解决方案分为三层: 1) `DAL` (Data Access Layer Entity Framework .EDMX) DATABASE First approach... 2) `Service` layer (will be calling DAL to get data from d

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

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

我将解决方案分为三层:

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.NETMVC项目中,我参考了服务项目

然而,我现在开始构建一个ASP.NETMVC

我尝试添加一个控制器并从DAL中选择模型类,但收到一个错误

错误1在未引用的程序集中定义了类型“myproj_dal.requester”。您必须添加对程序集“myproj_dal,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”的引用\issoa\u ui\Controllers\RequesterController.cs

这是我的控制器,看起来像:

public ActionResult Index()
{
    issoa_service.RequesterService reqService = new issoa_service.RequesterService();
    var model = reqService.GetRequesters(); //**<<<ERROR**
    return View(model);
}
我的问题是:

1) 为什么会出现上述错误?我是否需要将DAL的引用添加到UI中?如果是,那么我就破坏了松散耦合的整个目的

2) 正确的做法是什么;如果我没有按照最好的标准来做


任何人都可以指点我或纠正我,或对我大喊大叫,或将我重定向到某种解释,或者一个示例项目会有所帮助。

如果您不想从web项目中引用您的DAL,您需要将实体模型从DAL中取出,并将它们放在一个单独的项目中

创建一个名为
MyProj.Entities
的项目,并从任何需要它的地方(即所有其他项目)引用它。将
请求者
和其他实体类放入此项目中


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

为此,您需要在web项目中添加对DAL的引用。当然,如果您想在另一个项目中使用一个项目中的类,您必须这样做。如果您想避免耦合它们,为什么不为您的实体模型创建一个单独的项目,从两个需要它的项目中引用它?您是说将DAL ref添加到我的MVC项目中?这是我必须解决的唯一选项?如果你想在另一个项目中使用一个项目中的类,你必须引用它。时期这就是引用的全部要点。我确实为实体模型创建了单独的项目。请阅读我的问题。是的,我了解ref,DAL ref在我的服务中,那么为什么我应该在Web项目中使用DAL ref?那部分我不明白,我不明白吗?当我说我创建了一个DAL项目,其中有我所有的实体模型类?我现在很困惑。。。你能给我演示几行示例代码吗?嗯。。。你说的是创建POCO类吗?在一个单独的项目中?是的。在一个单独的项目中创建POCO,从DAL返回这些POCO,并从每个需要它的层引用POCO模型项目。然后你可以在每一层之间传递对象,而不需要紧密耦合。这很可能是最好的解决方案。它提供了一种抽象DAL和服务层的方法,因此,如果您决定不使用实体框架,您只需要更新DAL,但实际上不需要更改任何其他内容,因为所有实体都是一致的。
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; }
    }
}