代码之家  ›  专栏  ›  技术社区  ›  Syma

与实体框架4抗争

  •  0
  • Syma  · 技术社区  · 15 年前

    请告诉我如何用ef4方法处理积垢。我在asp.NETMVC1和EFV1.NET3.5SP1上启动了一个项目,但是在VS2010发布之后,我在阅读了这两种技术提供的新特性之后,将应用程序转换为asp.NETMVC2和ef4.net4。

    现在我有点股票,因为事情不像我想的那么容易,项目的最后期限很快就要到了。我将感谢一些帮助,主要是关于如何创建,更新和删除,而不做数据库旅行,在不需要的地方。

    我找到了一种不用数据库跳闸来处理CRUD命令的方法,但是这种方法的问题是它会覆盖所有未更改的和数据库生成的值(getutcdate())。等等),它不适用于对象图(对象关系)。关于如何把事情做好,有什么快速的建议吗? 我的update命令的代码是这样的。

    dc.PersonEntitySet.Attach(entity);ObjectStateEntry entry = dc.ObjectStateManager.GetObjectStateEntry(entity);entry.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
    

    谢谢。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Rick Rat    15 年前

    尝试使用ef4poco模板。但是为了更好地跟踪变化,我会使用自跟踪实体。

        2
  •  0
  •   user1141441    13 年前
    • 使用ADO.Net数据模型创建数据模型程序集(使用规范化数据库);

    • 将默认代码生成设置更改为“无”,并将元数据项目属性更改为“复制到输出目录” (这将在bin文件夹中生成模式文件,您可以将其复制到DAL或WCF 它有助于代码隔离)

    • 使用ADO.NETPOCO生成器生成POCO类

    • 保存edmx文件并生成程序集。 (保存设计器页面并关闭刷新代码)

    • 将代码文件复制到单独的程序集数据传输对象 这将是你的类型,以参考你的实体;

    • 在DTO程序集中删除了关键字“virtua”。 这将防止EF凌驾于生成的代码之上。

    • 创建DAL(数据访问层)作为单独的程序集(添加对System.Data.Entity的引用非常重要,否则上下文将不可访问) 把DAL隔离起来是好的。

    • 将上下文文件复制到DAL中;添加对DTO程序集的引用; 将3个架构文件从DM bin文件夹复制到此程序集的bin文件夹。

    • 创建另一个名为BLL(业务逻辑层)的程序集,并添加对DTO和DAL程序集的引用; 将数据模型bin文件夹中的3个模式文件复制到此bin文件夹中;构建BLL组件;

      将业务逻辑隔离开来总是好的。

    • 创建引用BLL和DTO的WCF服务 由于DTO中的类型是基元类型,所有序列化都由WCF处理。

    • 如果您使用win forms客户端,请添加服务引用; 这带来了可以在编译时使用的实体。