Вы беспокоитесь о производительности?
A) Нет: если это не так, вам не следует беспокоиться об этом и всегда использовать навигационные свойства для удобства чтения.
B) Да: тогда вам следует запросить у клиента .Select(c => c.id)
для начала и все еще использовать только свойства навигации. В этом случае ясно, что вы не будете обновлять никакое другое поле Customer
, потому что вы сравниваете его только с настройкой FK.
var customer = dbcontext.Customers
.Find(1)
.Select(b => new Customer { Id = b.Id } );
var order = new Order();
order.Customer = customer; //Set navigation prop as opposed to FK field
dbcontext.Orders.Add(order);
dbcontext.SaveChanges();
C) Да, очень сильно: в этом упрощенном примере Вы дали, бессмысленно запрашивать Customer
с его PK, чтобы затем использовать только PK. У вас уже есть вся необходимая информация, вы могли бы установить ее непосредственно в Order
. Однако нам придется прикрепить его вручную, иначе efcore попытается создать уже существующий Customer
.
var order = new Order();
order.Customer = new Customer { Id = 1 };
dbcontext.Attach<Customer>(order.Customer);
dbcontext.Orders.Add(order);
dbcontext.SaveChanges();