entity-framework - 具有现有域模型的 Entity Framework 4

标签 entity-framework ado.net

我目前正在考虑从流畅的 nHibernate 迁移到 ADO.Net Entity Framework 4。
我有一个包含用于 nHibernate 映射的域模型 (pocos) 的项目。我在博客中读到可以将我现有的域模型与 EF4 一起使用,但我没有看到它的例子。我见过使用 EF4 生成 T4 代码的示例,但还没有遇到一个示例,该示例展示了如何将现有域模型对象与 EF4 一起使用。我是 EF4 的新手,希望看到一些关于如何完成这项工作的示例。

谢谢
艾亚兹

最佳答案

快速演练:

  • 在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 ),您的域类 的属性必须是虚拟的 。这是必要的,因为 EF 4.0 生成的代理将覆盖它们以实现更改跟踪。

    如果您不想使用自动代理创建,则需要自己处理更改跟踪。详见 this MSDN page

    关于entity-framework - 具有现有域模型的 Entity Framework 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3002179/

    相关文章:

    c# - SQL Server 是否有最大连接限制

    c# - 如何将数据类型属性设置为 smalldatetime

    c# - NextResult 和 MARS 的区别

    c# - Nullable Int 输入字符串的格式不正确

    c# - 使用代码优先 Entity Framework 执行从一个到多个的关联

    c# - 使用自定义逻辑在 MVC 中对大量数据进行分页

    entity-framework - ASP.NET Core Task.WhenAll - 在上一个操作完成之前在此上下文中启动了第二个操作

    c# - 将 EF 实体映射到维护 ICollection 和延迟加载的 ViewModel

    entity-framework - 使用 StructureMap 处理 DbContext 异常

    c# - 如何获得使用 ExecuteNonQuery() 时发生的错误消息?