具有现有域模型的实体框架4

时间:2010-06-08 23:47:28

标签: entity-framework ado.net

我目前正在考虑从流畅的nHibernate迁移到ADO.Net实体框架4 我有一个项目包含我用于nHibernate映射的域模型(pocos)。我在博客中读到可以使用我现有的域模型和EF4,但我没有看到它的例子。我已经看过使用EF4生成T4代码的例子,但还没有看到如何使用EF4使用现有域模型对象的示例。我是EF4的新手,想看看如何完成这一步的一些示例。

由于 Aiyaz

1 个答案:

答案 0 :(得分:6)

快速演练:

  • 在Visual Studio中创建实体数据模型(.edmx),并清除edmx文件的“自定义工具”属性以防止代码生成
  • 使用与域类相同的名称在实体数据模型中创建实体。实体属性也应具有与域类
  • 中相同的名称和类型
  • 创建一个继承自ObjectContext的类以公开实体(通常与.edmx文件位于同一项目中)
  • 在该课程中,为每个实体创建一个ObjectSet<TEntity>类型的属性

示例代码:

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; }
}

就是这样......

重要提示:如果您使用自动代理创建进行更改跟踪(ContextOptions.ProxyCreationEnabled,默认情况下为true),则域类的属性必须为虚拟< / strong>即可。这是必要的,因为EF 4.0生成的代理将覆盖它们以实现更改跟踪。

如果您不想使用自动代理创建,则需要自己处理更改跟踪。有关详细信息,请参阅this MSDN page