Entity Framework 4.1 Code First: Рекомендации по сохранению данных из внешнего источника? - PullRequest
1 голос
/ 24 мая 2011

Часть моего проекта - сохранить данные из другого источника.В этом случае у нас есть источник данных 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 Ответ

1 голос
/ 25 мая 2011

Да, вы должны вручную проверить все, чтобы принять правильное решение, что должно быть вставлено, обновлено или удалено. В зависимости от приложения вы можете использовать несколько более сложных запросов, чтобы уменьшить количество обращений к базе данных - например, вы можете использовать один запрос с Contains для загрузки всех TeamMembers, необходимых для обработки Project, или вы можете загрузить Project включая все связанные данные, если вам также необходимо проверить, существует ли проект.

Ранее я делал большие приложения для синхронизации, и в итоге я предварительно загружал все сущности с помощью нескольких запросов и полностью работал в памяти.

Не забудьте использовать свойство Local DbSet или метод Find, чтобы воспользоваться уже загруженными сущностями.

Вы также можете использовать некоторые пользовательские хранимые процедуры для улучшения производительности этой операции.

...