Entity Framework 4.1 Создание повторяющихся записей поиска - PullRequest
2 голосов
/ 02 апреля 2011

Сначала я использую код EF 4.1. У меня есть два класса:

 public class Product {
      public int ID { get; set; }
      public string Name { get; set; }
      public int ProductTypeID { get; set; }
      public virtual ProductType ProductType { get; set; }
 }

 public class ProductType {
      public int ID { get; set; }
      public string Name { get; set; }
 }

Если у меня есть несколько существующих типов продукта, которые я уже создал (например, идентификаторы 2,3,4), и я пытаюсь назначить один из этих типов продукта новому продукту, он создаст дубликат типа продукта.

Например, если мой самый большой ProductTypeID равен 4, и я запускаю следующий код, он выдаст дубликат:

 Expression<Func<ProductType, bool>> expr = s => s.ID == 2;
 ProductType t = DBContext.Set<ProductType>().Where(expr).First();
 Product p = new Product();
 p.ProductType = t;
 DBContext.SaveChanges();

Это фактически создаст новую строку в таблице «ProductType». Новый ProductType будет идентичен идентификатору с идентификатором 2, но у него будет новый идентификатор 5. Все, что я пытаюсь сделать, это связать тип с ID = 2 с моим новым продуктом. Есть идеи, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2011

Почему вы загружаете ProdutType из базы данных? На вашей сущности выставлен внешний ключ, поэтому вам нужно:

Product p = new Product();
p.ProductTypeId = 2;
DBContext.Products.Add(p);
DBContext.SaveChanges();
0 голосов
/ 02 апреля 2011

Это на самом деле распространенная ошибка при использовании EF.

Вам необходимо добавить новый продукт в DBContext:

Product p = new Product();
p.ProductType = t;
DBContext.AddObject(p); //here
DBContext.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...