我有一个包含所有Entity Framework代码的类库。
我正在开发一个涉及多个子项目的解决方案,包括一个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)
所以在我的服务项目中,我引用了Data Access dll
ASP.NET MVC项目中的我参考了服务项目
但是,我现在开始构建一个ASP.NET MVC。
我尝试添加控制器并从我的DAL中选择Model类收到错误
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)为什么我收到上述错误,是否需要在UI中添加DAL的引用?如果是,那么我正在打败松散耦合的整个目的。
2)正确的做法是什么;如果我不按最佳标准做的话。
任何人都可以指点我或纠正我或对我大喊大叫或重定向我的某些解释或示例项目会有所帮助。?
答案 0 :(得分:3)
如果您不想从Web项目中引用DAL,则需要从DAL中取出实体模型并将它们放在单独的项目中。
创建一个名为MyProj.Entities
的项目,并从需要它的所有地方(即所有其他项目)中引用它。将Requester
和其他实体类放在此项目中。
现在您的网络项目不再需要与您的DAL紧密结合,但您仍然可以在它们之间共享您的实体类。