在Entity Framework 4中映射現有實體類(POCO)
Entity Framework的全稱是ADO.NET Entity Framework,是微軟開發的基于ADO.NET的ORM(Object/Relational Mapping)框架。
Entity Framework的主要特點:
1. 支持多種數據庫(Microsoft SQL Server, Oracle, and DB2);
2. 強勁的映射引擎,能很好地支持存儲過程;
3. 提供Visual Studio集成工具,進行可視化操作;
4. 能夠與ASP.NET, WPF, WCF, WCF Data Services進行很好的集成。
更多簡介,請看:ADO.NET Entity Framework At-a-Glance
在博客園新版短消息功能開發中,我們準備用Entity Framework 4,我們首先面臨這樣的問題:
實體類與數據庫都已經存在,而且實體類的類名與數據庫中的表名,類的屬性與表中對應的字段名稱不同。也就是說我們不能使用通常的方法在VS2010中通過ADO.NET Entity Data Model(.edmx文件)生成實體類與ObjectContext。
注:這個實體類有個稱呼叫POCO(Plain Old CLR Objects)。
我們解決方法是:在.edmx文件中手動配置映射關系。
下面是操作步驟:
1. 使用ADO.NET Entity Data Model,在VS2010創建一個.edmx文件,如下圖:
2. 根據Entity Data Model Wizard進行操作,在選擇數據庫表的窗口中,注意在Model Namespace輸入框中輸入現有實體類的命名空間,如下圖:
3. 點擊Finish,生成相應的EntityType,如下圖:
這里的EntityType是根據數據庫中的表結構生成的,與實際的實體類是不一樣的,表名與類名不一樣,表的很多字段與類的屬性不一樣。
下面我們配置映射的關鍵地方:
4. 點擊.edmx窗口點擊空白處,在屬性窗口中將Code Generation Strategy的屬性設置為None(見下圖),也就是不讓VS2010自動生成實體類和對應的ObjectContext。
5. 繼續在.edmx窗口,選擇實體類,點擊右鍵選擇Show in Model Browser,見下圖:
6. 進入Model Browser窗口,見下圖:
上圖中,上面是實體類(這里是VS2010自動生成的,與數據庫表是一一對應的),下面是表結構。
修改映射就是在這里:在Entity Types中將類名改為實際的實體類名,將屬性改為實際的屬性,如下圖:
修改之后,映射就配置好了,.edmx文件中實體類圖中也隨之自動更改,見下圖:
7. .edmx文件實際就是一個xml文件,映射信息就存放在其中。在VS2010解決方案管理器中選擇這個文件,右鍵Open With,選擇用XML Editor打開,就可以看到.edmx文件的內容,如下圖:
8. 再寫個繼承自ObjectContext的類(見下圖),工作就完成了。