2010-06-08 47 views
4

我目前正在考慮從流利的nHibernate遷移到ADO.Net實體框架4.
我有一個項目,包含我用於nHibernate映射的域模型(pocos)。我已經在博客中讀到可以在EF4中使用現有的領域模型,但我沒有看到它的例子。我見過使用EF4生成T4代碼的例子,但還沒有找到一個例子來說明如何在EF4中使用現有的領域模型對象。我是EF4的一個新手,希望看到一些關於如何完成這個任務的範例。實體框架4與現有域模型

感謝 Aiyaz

回答

6

快速演練:

  • 創建一個實體數據模型(的.edmx)在Visual Studio中,並清除EDMX文件,以防止代碼的 「自定義工具」 屬性代
  • 在您的實體數據模型中創建與您的域類相同名稱的實體。實體屬性也應該有相同的名稱和類型,在域類
  • 創建一個從ObjectContext繼承一個類來暴露實體(通常在同一項目中的.edmx文件)
  • 在這一類中,創建一個

    public class SalesContext : ObjectContext 
    { 
        public SalesContext(string connectionString, string defaultContainerName) 
         : base(connectionString, defaultContainerName) 
        { 
         this.Customers = CreateObjectSet<Customer>(); 
         this.Products = CreateObjectSet<Product>(); 
         this.Orders = CreateObjectSet<Order>(); 
         this.OrderDetails = CreateObjectSet<OrderDetail>(); 
        } 
    
        public ObjectSet<Customer> Customers { get; private set; } 
        public ObjectSet<Product> Products { get; private set; } 
        public ObjectSet<Order> Orders { get; private set; } 
        public ObjectSet<OrderDetail> OrderDetails { get; private set; } 
    } 
    

    這就是它...

    :爲每個實體

示例代碼的ObjectSet<TEntity>類型的財產

重要提示:,如果您使用更改跟蹤(ContextOptions.ProxyCreationEnabled,其默認爲true)自動代理的創建,您的域類的特性必須是虛擬。這是必要的,因爲EF 4.0生成的代理將覆蓋它們以實現更改跟蹤。

如果您不想使用自動代理創建,則需要自己處理更改跟蹤。詳情請見this MSDN page

+0

謝謝,我現在明白了。花了一段時間才能通過T4模板生成。 – ace 2010-06-10 04:32:31