Ef code first 实体框架4.1代码优先:关于从外部源持久化数据的建议?

Ef code first 实体框架4.1代码优先:关于从外部源持久化数据的建议?,ef-code-first,entity-framework-4.1,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

我的项目的一部分是持久化来自另一个源的数据。在这种情况下,我们需要从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
    }
公共类项目:BaseEntity
{
公共字符串名称{get;set;}
公共字符串ProjectNumber{get;set;}
公共字符串说明{get;set;}
通过{get;set;}创建的公共字符串
公共字符串由{get;set;}修改
公共字符串货币{get;set;}
#区域导航属性
公共虚拟地址{get;set;}
公共虚拟公司代码公司代码{get;set;}
公共虚拟ICollection团队成员{get;set;}
#端区
}

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

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

我以前做过大型同步应用程序,最后在开始时预加载所有实体,只需很少的查询,并且完全在内存中工作

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


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

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

我以前做过大型同步应用程序,最后在开始时预加载所有实体,只需很少的查询,并且完全在内存中工作

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


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

这正是我希望听到的!另一个选择是使用类似Lucene.Net的东西从索引中提取信息,而不点击数据库。这正是我希望听到的!另一种选择是使用类似Lucene.Net的东西从索引中提取信息,而不需要点击数据库。