我的项目的一部分是保留来自其他来源的数据。在这种情况下,我们有一个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不知道我的应用程序可能有或没有。我也需要防范重复。例如,我应该在我的父实体中执行每个子实体的查找,以便在我将它们应用于父实体之前查看它们是否存在?然后,将整个父对象添加/附加到上下文或分别处理每个实体,同时仍然维护它们的关系?
答案 0 :(得分:1)
是的,您必须手动测试所有内容,以便正确决定必须插入,更新或删除的内容。根据应用程序的不同,您可以使用一些更复杂的查询来减少到数据库的往返次数 - 例如,您可以使用Contains
的单个查询来加载已处理TeamMembers
所需的所有Project
或者,如果您还需要测试项目是否存在,则可以加载Project
并包含所有相关数据。
之前我做了大型同步应用程序,最终我在开始时预先加载了所有实体,只需要很少的查询并完全在内存中工作。
不要忘记使用DbSet的Local
属性或Find
方法来利用已经加载的实体。
您还可以使用一些自定义存储过程来提高此操作的性能。