实体框架4.1创建重复的查找条目

时间:2011-04-02 00:18:09

标签: entity-framework entity-framework-4.1

我首先使用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; }
 }

如果我有一些我已经创建的现有ProductTypes(例如ID 2,3,4),并且我尝试将其中一个ProductTypes分配给新产品,它将创建Product类型的副本。

例如,如果我最大的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将与ID 2相同,但它将具有新的ID 5.我想要做的就是将ID = 2的类型与我的新产品相关联。知道我做错了吗?

2 个答案:

答案 0 :(得分:0)

这实际上是使用EF的常见错误。

您需要将新产品添加到DBContext:

Product p = new Product();
p.ProductType = t;
DBContext.AddObject(p); //here
DBContext.SaveChanges();

答案 1 :(得分:0)

为什么要从数据库加载ProdutType?您在实体上公开了外键,因此这就是您所需要的:

Product p = new Product();
p.ProductTypeId = 2;
DBContext.Products.Add(p);
DBContext.SaveChanges();