ADO.NET POCO Entity Generator With Entity Framework

 

我們利用 Visual Studio 2010 建立一個多階層的 Appication,在這邊利用POCO 工具來對 Entity Data Model 產生 POCO 的物件。

假設我們已經建立好 Data Entity edmx 的部分,預設他也會建立一個 Designer.cs

image

打開 Designer.cs 裡面應該有類似於下面的程式碼

namespace Eoa.Infrastructure.Entity
{
#region Contexts

public partial class EoaModelEntities : ObjectContext
{

}

#endregion

#region Entities

public partial class Articals : EntityObject
{

}

#endregion
}

可以看到 vs2010 幫我們建立了兩個部分,ObjectContext 跟 EntityObject

ObjectContext : 提供以物件形式查詢和使用實體資料的機能。

EntityObject : Entity Data Model 工具所產生之實體類型的基底類別。

這邊是MSDN上面的解釋,其實就是說繼承 EntityObject 部分是 Model 工具根據 edmx 裡面的設計去建立的物件。而 ObjectContext 則是控制這些東西要怎麼去跟資料庫實體去互動。這樣子已經算是完整的把資料庫物件化了,整個資料庫是一個物件,而裡面的 Table 也有個別的物件去控制。

那為什麼要用 POCO ,因為這邊的 EntityObject 用起來太麻煩了,而且也不夠直覺,重點又回到了關注點分離的部分,當我 new 一個物件起來的時候,我還不想管資料庫要怎麼去處理他。如果買車的時候,銷售員硬要你買車庫,也是一件很不可理喻的事情吧。

image

回到 edmx 的屬性頁面,這時候把 Custom Tool 清除

image

可以看到這邊的 Designer.cs 已經被移除掉了,接下來加入 ADO.NET C# POCO Entity Generator

image

image

image

看到這邊 ADO.NET C# POCO Entity Generator 一樣幫我們產生了 ObjectContext 跟 Object 兩個部分,只是這邊的 Object 不再是 EntityObject 而是 CLR Object 。

image

接下來把 CLR Object 移到我們想要他去的地方,並且在 string inputFile  的部分指向原本專案的edmx,這邊的相對路徑是根據實際資料夾中的相對路徑,不是方案中的虛擬資料夾設定,這邊是因為我實際資料夾設定就是方案資料夾的設定。

image

在 T4 Template 的使用上,當你 save .tt 檔案的時候,他才會自動去更新產生的 .cs 檔案。例如說在 EoaModel.edmx 的介面中修改了屬性或是增加了欄位,這時候我需要回到 EoaModel.tt 重新儲存一次,這時候他會根據 inputFile 這個屬性去重新參考檔案,並且重新建立 EoaModel.tt 底下全部的檔案,所以說手動修改 EoaModel.tt 裡面的檔案是不建議的做法。

移至新專案下之後 EoaModel.tt 重新儲存的時候,他也會修改 namespace 的部分。

記得原本的元件要加入新元件的參考,並且在 ObjectContext 加入參考。

image

就如同剛剛所提到的,如果直接在 EoaModel.Context.tt > EoaModel.Context.cs 去做修改,那之後在每一次重新建立的時候,都會被覆蓋掉,所以我這邊用的方法是到EoaModel.Context.tt 檔案中去修改 template 。

image

這樣子在重新建立的時候也能夠每一次都將 Eoa.Domain.Model 加入 using

Reference

POCO Tool

http://visualstudiogallery.msdn.microsoft.com/23df0450-5677-4926-96cc-173d02752313

POCO in the Entity Framework: Part 1 – The Experience

http://blogs.msdn.com/b/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx

POCO in the Entity Framework : Part 2 – Complex Types, Deferred Loading and Explicit Loading

http://blogs.msdn.com/b/adonet/archive/2009/05/28/poco-in-the-entity-framework-part-2-complex-types-deferred-loading-and-explicit-loading.aspx

Sneak Peek – Using Code Generation Templates with the Entity Framework 4.0

http://blogs.msdn.com/b/adonet/archive/2009/05/19/sneak-peek-using-code-generation-templates-with-the-entity-framework-4-0.aspx

Where to place the entity framework in our solution?

http://stackoverflow.com/questions/5558996/where-to-place-the-entity-framework-in-our-solution/5559032#5559032

*Entity Framework POCO Repository using Visual Studio 2010 .Net 4.0 Beta 1

http://blog.keithpatton.com/2009/05/30/Entity+Framework+POCO+Repository+Using+Visual+Studio+2010+Net+40+Beta+1.aspx

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *