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

ace*_*ace 4 ado.net entity-framework

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

谢谢Aiyaz

Tho*_*que 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; }
}
Run Code Online (Sandbox Code Playgroud)

就是这个......

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

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