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