在实体框架4中苦苦挣扎

时间:2010-06-26 14:58:13

标签: entity-framework-4

我需要有关如何以ef4方式处理CRUD的帮助。我在asp.net mvc1和ef v1 .net 3.5 sp1上开始了一个项目,但是在vs 2010发布之后,我将应用程序转换为asp.net mvc2和ef4 .net4,之后对这些技术提供的新功能进行了一些阅读

现在有点股票,因为事情并不像我想象的那么容易,而且项目的截止日期即将来临。我将非常感谢一些帮助,主要是如何创建,更新和删除,而不需要在不需要的情况下进行数据库访问。

我找到了一种方法来处理CRUD命令而不会导致数据库跳闸,但这种方法的问题是它会覆盖数据库中所有未更改的和数据库生成的值(getutcdate()等)并且它不适用于对象图(对象关系)。关于如何正确处理的任何快速建议?  我的更新命令的代码就是这个。

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

我目前在客户端上使用POCO,并在执行ef操作之前在DAL上手动将其转换为实体框架实体。

感谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

  • 使用ADO.Net数据模型创建DataModel程序集(使用规范化数据库);

  • 删除所有导航属性(如果您的数据库使用大量外键关系进行彻底规范化,最好这样做)

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

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

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

  • 将代码文件复制到单独的程序集数据传输对象 这将是您引用实体的类型; 您可以在BLL,DAL和WCF中使用它们

  • 在DTO程序集中删除了关键词“virtua”。 这样可以防止EF覆盖生成的代码。

  • 将DAL(数据访问层)创建为单独的程序集。 (添加对System.Data.Entity的引用非常重要,否则上下文将无法使用) 保持DAL是孤立的。

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

    您将受益于代码隔离;当您需要添加更多实体或存储过程时,只需复制代码文件并替换3个模式文件

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

    将业务逻辑保持在隔离状态总是好的。

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

  • 如果使用win form client添加服务引用; 这将带来您可以在编译时使用它的实体。

希望这有帮助。

相关问题