实体框架4.1代码优先:关于持久保存外部数据的建议?

时间:2011-05-24 19:57:43

标签: ef-code-first entity-framework-4.1

我的项目的一部分是保留来自其他来源的数据。在这种情况下,我们有一个SAP数据源,我们需要从中提取数据。我需要从SAP获取数据并将其映射到我的应用程序中的实体。以下是我的应用程序中的实体示例:

    public class Project : BaseEntity
    {
        public string Name { get; set; }
        public string ProjectNumber { get; set; }
        public string Description { get; set; }

        public string CreatedBy { get; set; }
        public string ModifiedBy { get; set; }
        public string Currency { get; set; }

        #region Navigation Properties

        public virtual Address Address { get; set; }
        public virtual CompanyCode CompanyCode { get; set; }
        public virtual ICollection<Contact> TeamMembers { get; set; }

        #endregion
    }

如您所见,我也有从SAP映射的子对象。我需要一些关于插入和更新我的实体的最佳方法的建议。我正在努力知道何时向我的上下文添加(插入)实体以及何时附加(更新)它们,因为SAP不知道我的应用程序可能有或没有。我也需要防范重复。例如,我应该在我的父实体中执行每个子实体的查找,以便在我将它们应用于父实体之前查看它们是否存在?然后,将整个父对象添加/附加到上下文或分别处理每个实体,同时仍然维护它们的关系?

1 个答案:

答案 0 :(得分:1)

是的,您必须手动测试所有内容,以便正确决定必须插入,更新或删除的内容。根据应用程序的不同,您可以使用一些更复杂的查询来减少到数据库的往返次数 - 例如,您可以使用Contains的单个查询来加载已处理TeamMembers所需的所有Project或者,如果您还需要测试项目是否存在,则可以加载Project并包含所有相关数据。

之前我做了大型同步应用程序,最终我在开始时预先加载了所有实体,只需要很少的查询并完全在内存中工作。

不要忘记使用DbSet的Local属性或Find方法来利用已经加载的实体。

您还可以使用一些自定义存储过程来提高此操作的性能。