Платформа объекта многие многим CRUD

Важный момент - то, что хвостовая рекурсия чрезвычайно эквивалентна цикличному выполнению. Это не просто вопрос компиляторной оптимизации, но и фундаментальный факт о выразительности. Это идет обоими путями: можно взять любой цикл формы

while(E) { S }; return Q

, где E и Q выражения, и S последовательность операторов, и превратите, это в рекурсивную функцию

f() = if E then { S; return f() } else { return Q }

хвоста, Конечно, E, S, и Q должно быть определено для вычисления некоторого интересного значения по некоторым переменным. Например, функция цикличного выполнения

sum(n) {
  int i = 1, k = 0;
  while( i <= n ) {
    k += i;
    ++i;
  }
  return k;
}

эквивалентна рекурсивной функции (функциям) хвоста

sum_aux(n,i,k) {
  if( i <= n ) {
    return sum_aux(n,i+1,k+i);
  } else {
    return k;
  }
}

sum(n) {
  return sum_aux(n,1,0);
}

(Это "обертывание" рекурсивной функции хвоста с функцией с меньшим количеством параметров является общей функциональной идиомой.)

8
задан Nalaka526 3 April 2012 в 08:53
поделиться

2 ответа

Предполагая CategoryProduct таблица просто состоит из двух FK: один для Product и один для Category ... EF по умолчанию не будет создавать объект CategoryProduct , вместо этого для управления в этой таблице вам нужно будет создать / удалить отношения с помощью коллекций Product.Categories или Category.Products .

То есть, чтобы добавить строку:

product.Categories.Add(category); // or category.Products.Add(product);

Чтобы удалить строку:

product.Categories.Remove(category); // or visa versa

Запросить таблицу, т.е. получить строки в этой таблице:

var pc = from c in ctx.Categories
         from p in c.Products
         select new {CategoryID = c.ID, ProductID = p.ID};

И обновление не имеет смысла, потому что PK (который не может измениться) - это все столбцы, т.е. ни один из столбцов строки не может быть обновлен , поэтому сама строка не может быть обновлена ​​(за исключением, конечно, удалений).

Надеюсь, это поможет

Алекс Джеймс

13
ответ дан 5 December 2019 в 12:11
поделиться

Есть два способа, по крайней мере, два я могу подумайте о:

  1. Создайте сущность для каждого объекта, это мерзко и, как обычно, сложно правильно выполнить проводку.
  2. Измените модель так, чтобы она моделировала отношения «многие ко многим» как отношения «многие-ко-многим» to-many он сделает все за вас.

Вариант 2 - лучший способ, но в настоящее время имеет ограничение: если у вас есть другие данные, связанные с CategoryProduct, он не работает.

1
ответ дан 5 December 2019 в 12:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: