2014-11-15 3 views
0

У меня есть таблица под названием "Корзина", который имеет составной ключ из 2-х значений:Сформировать уникальный идентификатор (Entity Framework)

public class Cart 
{ 
    [Column(Order=0), Key] 
    public int Id { get; set; } 

    [Column(Order=1), Key] 
    public int ProductId { get; set; } 

    public int Quantity { get; set; } 

} 

Так, например, тот же ids «Корзина» может иметь разные ProductIds (одна тележка с различными продуктами на нем). Из-за этого столба Корзина Id не является уникальным, я не могу использовать атрибут DatabaseGeneratedOption.Identity, чтобы спросить EF о создании уникальных идентификаторов.

Когда я вставляю новый объект телеобъекта в базу данных и перебираю продукты в корзине, можно ли спросить EF о создании нового уникального идентификатора только один раз и вернуться на сервер?

int unqiueId = ??(dbcontext.Generate Unique ID For This Table) 
foreach (var cartLine in cart.CartLines) 
     { 
      Cart cartLinePurchased = new Cart{ 
       Id = uniqueId, 
       ProductId=cartLine.Product.Id, 
       Quantity=cartLine.Quantity 
      }; 
      dbcontext.CartPurchased.Add(cartLinePurchased); 
      dbcontext.SaveChanges(); 
      cartPurchased = cartLinePurchased; 
     } 

Заранее спасибо.

+0

Какая цель состоит в том, чтобы иметь несколько строк с одним и тем же «ИД»? –

+0

Тот же идентификатор означает ту же самую корзину. Одна тележка (один уникальный идентификатор) с разными Продуктами на ней. Например, тележка с Id = 1, имеет 1,2,3,4,5 productIds на ней; cart с Id = 2, имеет 3,5,7,8 продукта на нем; и т. д. Вот почему я создал составной ключ. –

+2

Как насчет использования Guid? Или иметь отдельную таблицу корзин, которая будет отвечать за предоставление вам этих уникальных номеров? –

ответ

2

Во-первых: EF не может создать уникальное значение составного ключа. see this SO answer.

Во-вторых: ваша база данных денормализована. Вы должны его нормализовать. Существует телега, которая может иметь несколько продуктов, то:

  • вам нужен cart стола, который имеет идентификатор корзины (может быть один ПК, порожденным БД с использованием идентичности, и это поддерживается EF) , Эта тележка должна иметь только данные, относящиеся непосредственно к тележке (например, идентификатор корзины, идентификатор клиента, дата создания корзины ...)
  • Вам нужен стол productInCart, в котором хранятся все товары тележки. Эта таблица должна иметь FK, которая связывает каждую строку productInCart с соответствующей тележкой, используя идентификатор cart. Это может иметь данные, связанные с продуктами в корзине, как продукт, количество, цена за единицу товара, общая стоимость ...

Вы можете прочитать, чтобы узнать о database normalization

вещей станет намного легче, если вам делайте их так. Если нет, у вас будет много проблем, кроме генерации ПК для каждой строки.

Смежные вопросы