Entity Framework добавляет много сущностей, вложенные свойства уже существуют - PullRequest
0 голосов
/ 25 сентября 2018

Мне нужно добавить много объектов одновременно.Это не сложно:

EntityType entities = GetEntities();
dbContext.MyTable.AddRange(entities);

Однако каждая сущность ссылается на другое вспомогательное свойство (которое уже существует и для которого я знаю идентификатор).Есть ли эффективный способ избежать предварительного запроса всех субпредприятий?

for (int i = 0; i < entities.Length; i++)
{
    // adding already existing property 
    entities[i].MyProperty = new MyProperty { Id = ExternalIds[i] };
}

dbContext.MyTable.AddRange(entities); // Don't want to create new entities

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Два решения: сначала вы можете присоединить связанный объект сущности вручную, чтобы он отслеживался в неизменном состоянии до добавления целевого объекта сущности:

var myProps = ExternalIds
    .Select( id => new MyProperty { Id = id } )
    .ToArray();

dbContext.AttachRange( myProps ); // tracks as Unchanged

...
entities[ i ].MyProperty = myProps[i];

Или предоставить свойство FK для свойства navи просто установите идентификатор (это мое предпочтительное решение, если вы работаете со значениями FK)

public class EntityType
{
    ...
    public int MyPropertyId { get; set; }
    [ForeignKey( "MyPropertyId" )]
    public MyProperty MyProperty { get; set; }
}

...
Entities[i].MyPropertyId = ExternalIds[i]
0 голосов
/ 25 сентября 2018

Вы можете создать пустой объект сущности только с идентификатором, вы также можете добавить ключ свойства к вашей сущности

public class Course
{
  public int CourseID { get; set; }
  public string Title { get; set; }
  public int Credits { get; set; }
  public int DepartmentID { get; set; }
  public virtual Department Department { get; set; }
}

Здесь вы можете просто поместить значение DepartmentID и сохранить, или

Course.Department = new Department{ id = 123 }

В документах указано

Если ссылка находится в добавленном состоянии (в данном примере, объект курса), свойство навигации по ссылкам не будет синхронизированосо значениями ключа нового объекта до вызова SaveChanges.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...