2011-06-17 82 views
1

我正在使用Entity框架開始使用它。以下是我安排我的項目與EF交互的方式。我只想知道我是否正朝着正確的方向前進。請建議更好的方法。請忽略UI之類的架構,不應該引用DAL。這只是「瞭解」項目。 :)這是與實體框架交互的正確方法嗎?

這就是我在做的:

DAL的一個項目。這裏所有的數據庫操作都將使用EF。

模型 - 業務實體類。而不是返回EF的Order對象,我將返回Model的實體類。 (有沒有辦法將我的商業實體映射到EF實體?)

UI - 這將調用DAL並完成任務。

項目1 - DAL

該項目還包含我的edmx文件。

public class DALRepository 
{ 

    OrderEntities orderEntitiesContext = new OrderEntities(); 

    public IQueryable<Model.OrderModel> GetOrders() 
    { 
     return orderEntitiesContext.Orders.Select(o => new Model.OrderModel { OrderName = o.OrderName, Id = o.OrderID }); 
    } 
} 

項目2 - 型號

public class OrderModel 
{ 
    public long Id { get; set; } 
    public string OrderName { get; set; } 
} 

項目3 - UI

public partial class OrderList : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     DAL.DALRepository dal = new DAL.DALRepository(); 
     GridView1.DataSource = dal.GetOrders(); 
     GridView1.DataBind(); 
    } 
} 

回答

3

考慮使用DAL外部所需的API添加接口項目,以啓用沒有DAL和使用DAL項目實現這些接口的實現項目的單元測試。

+0

正確的。就像這樣說,這只是「瞭解EF」項目。我知道它可以帶來多少痛苦,如果我想單元測試它並不暴露接口。 :) – Asdfg

+0

那麼是的,你正在走正確的道路。 –

+0

一個小問題。這是他們所稱的實體框架與POCO對象嗎? – Asdfg

1

我認爲這是優秀的,你在正確的道路。

我還建議在VS解決方案中使用體系結構項目,以限制其他開發人員針對不正確的項目交叉調用並保留合適的SoC。

1

在我看來,你走在正確的道路上。 創建投影有時很麻煩,你遲早會忘記一個屬性。

這是從源對象複製屬性到目標對象的框架: http://automapper.codeplex.com/

1

一個小問題。這是他們所稱的實體框架與POCO對象嗎?

從你這顯示什麼會被稱爲CodeFirst

+0

我猜CodeFirst更好。讓我更好地控制自己在做什麼。 – Asdfg