Я надеюсь, что это объяснит вам, почему они на самом деле являются линейными.
предположим, что вы вызываете функцию и видите, сколько раз они выполнялись
Prime(n): # 1 time
for i in range(2, n-1) #n-1-1 times
if n % i == 0 # 1 time
return False # 1 time
return True # 1 time
# overall -> n
Prime(n): # Time
for i in range(2, (n/2+1)) # n//(2+1) -1-1 time
if n % i == 0 # 1 time
return False # 1 time
return True # 1 time
# overall -> n/2 times -> n times
это показывает, что штрих является линейной функцией
O (n ^ 2) может быть из-за блока кода, где эта функция называется.
(Спасибо John для грамматики фиксирует),
Таким образом, я понял это. Это - то, что необходимо сделать:
db.Models.Order order = DB.Models.Order.CreateOrder( apple );
order.Customer = (from c in db.Customer where c.Id == custId select c).First();
db.SaveChanges();
Я надеюсь, что это помогает людям.
Почему бы не использовать ссылки на сущность? Ваш метод вызовет дополнительное SELECT
оператор.
Намного более хороший путь состоит в том, чтобы использовать CustomerReference
класс и EntityKey
.
order.CustomerReference = new System.Data.Objects.DataClasses.EntityReference<Customers>();
order.CustomerReference.EntityKey = new EntityKey("ModelsEntities.Customers", "Id", custId);
Вот пример кода для обновления:
using (var ctx = new DataModelEntities())
{
var result = (from p in ctx.UserRole.Where(o => o.UserRoleId == userRole.UserRoleId)
select p).First();
result.RolesReference.EntityKey = new EntityKey("DataModelEntities.Roles",
"RoleId", userRole.RoleId);
result.UserRoleDescription = userRole.UserRoleDescription;
ctx.SaveChanges();
}