使用具有POCO实体的实体框架在关联实体中重复行

时间:2012-08-28 01:35:21

标签: c# entity-framework poco entity-relationship

我在Entity-Frameworks实体使用POCO时遇到问题。我有产品和类别之间的关系,我有以下代码可以在数据库中保留:

    public virtual void Add(T entity)
    {
        ContextEntity.AddObject(entity);
        Context.SaveChanges();
    }

我正在尝试创建一个已经存在类别的新产品,但是当我查询数据库时,新产品与新类别的关系具有与我正在试图联系的先前类别相同的值。 我一直在寻找答案,但这些例子对我不起作用,因为我没有他们在示例中使用的相同方法。也许是因为我使用的是POCO个实体,我不确定。

2 个答案:

答案 0 :(得分:1)

我对你的代码做了一些假设,但也许其中一种方法会有所帮助。

  1. 创建新的Product实例时,您可以设置外键 值类似于现有类别ID

  2. 的CategoryId
  3. 如果要设置导航属性“Product.Category”,请执行     必须确保以下内容:

  4. 引用的Category实例必须由上下文拥有,方法是使用Context.Categories.Attach或首先通过上下文获取它。 Context.Categories.FirstOrDefault(c => c.id == 1)

    如果将Product.Category设置为等于已断开连接的类别实例,则上下文将自动尝试添加引用的实例。

答案 1 :(得分:0)

    [HttpPost]
    public ActionResult Create(CategoriaView collection)
    {
        try
        {
            UnidadDeMedida unidadDeMedida= 
                unidadDeMedidaService.GetByCriteria(i => i.IdUnidadDeMedida == collection.UnidadDeMedida.IdUnidadDeMedida)
                .FirstOrDefault();
            Mapper.CreateMap<UnidadDeMedida,UnidadDeMedidaView>();
            Mapper.CreateMap<UnidadDeMedidaView,UnidadDeMedida>();
            UnidadDeMedidaView unidadDeMedidaView =
                Mapper.Map<UnidadDeMedida,UnidadDeMedidaView>(unidadDeMedida);
            collection.UnidadDeMedida = unidadDeMedidaView;
            Mapper.CreateMap<CategoriaView, Categoria>();

            Categoria categoria =
                Mapper.Map<CategoriaView, Categoria>(collection);
            categoria.UnidadDeMedida = unidadDeMedida;
            service.Add(categoria);

            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }