inl*_*esh 8 .net asp.net soa entity-framework
我在一个解决方案中创建了三个项目,一个Web应用程序,两个用于DAL和BLL的类库.在DAL层创建了Entity Framework模型,并在BLL项目中引用了DAL库.
当我从Web应用程序项目调用BLL对象遇到问题时,它说我需要引用实体框架.我不想在Web应用程序项目中对DAL库对象有任何依赖.
是否有任何关于使用Entity Framework构建干净的三层应用程序的具体指导.
Nat*_*ate 19
听起来你的BLL暴露了entity你在DAL中添加的类.您需要在BLL中创建包装类(即POCO)并返回那些而不是DAL中的实体.
这可能就是你在做的事情:
// DAL
// .edmx file generated entities
public IQueryable<TableEntity> GetTableEntities()
{
     // read from entity framework and return
}
// BLL
public IEnumerable<TableEntity> ReadTableEntitiesForUser(int userID);
{
    var d = new DAL();
    var entities = d.GetTableEntities();
    // restrict to entites this user "owns"
    entities = entities.Where(e => e.OwnerID.Equals(userID));
    return entities;        
}
// WebApp
var b = new BLL();
var myEntities = b.ReadTableEntitiesForUser(1234);
这可能是你应该做的:
// DAL
// .edmx file generated entities
public IQueryable<TableEntity> GetTableEntities()
{
     // read from entity framework and return
}
// BLL
public class TableEntityDTO 
{
    public int ID { get; set; }
    public string Name { get; set; }
    // continue on for each column in the table
    // and make a DTO class for each table in your database
}
public IEnumerable<TableEntityDTO> ReadTableEntitiesForUser(int userID);
{
    var d = new DAL();
    var entities = d.GetTableEntities();
    // restrict to entites this user "owns"
    entities = entities.Where(e => e.OwnerID.Equals(userID));
    // convert from "Entity Framework Object" to "BLL Object"
    foreach(var e in entities)
    {
        yeild return new TableEntityDTO() { ID = e.ID, Name = e.Name };
    }
}
// WebApp
var b = new BLL();
var myEntities = b.ReadTableEntitiesForUser(1234);
这对于.NET 3.5SP1和Linq-To-SQL附带的实体框架都是如此,我已经使用了它们,它可能适用于EF的最新版本,但是Code-First和其他东西都有可能是一种避免这种额外的数据传输对象步骤的方法,尽管采用面向服务的体系结构,DTO可能是最好的方法.
| 归档时间: | 
 | 
| 查看次数: | 8394 次 | 
| 最近记录: |