7
我在解決方案,一個Web應用程序,DAL和BLL的兩個類庫中創建了三個項目。在DAL層中創建了實體框架模型,並在BLL項目中引用了DAL庫。如何爲實體框架創建三層解決方案
當我從Web應用程序項目調用BLL對象時遇到問題,它說我需要引用實體框架。我不想在Web應用程序項目中對DAL庫對象進行任何依賴。
是否有關於使用實體框架構建清潔三層應用程序的具體指導。
我在解決方案,一個Web應用程序,DAL和BLL的兩個類庫中創建了三個項目。在DAL層中創建了實體框架模型,並在BLL項目中引用了DAL庫。如何爲實體框架創建三層解決方案
當我從Web應用程序項目調用BLL對象時遇到問題,它說我需要引用實體框架。我不想在Web應用程序項目中對DAL庫對象進行任何依賴。
是否有關於使用實體框架構建清潔三層應用程序的具體指導。
您BLL的聲音會暴露您在DAL中添加的entity
類。您需要在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可能是最好的選擇。
謝謝@Nate,數據傳輸對象錯過了並陷入困境。 – inlokesh 2011-05-03 21:10:31