2

エンティティの使用Entity-Frameworksに問題があります。POCO製品とカテゴリの間に関係があります。データベースに保持する次のコードがあります。

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

既存のカテゴリで新しい製品を作成しようとしていますが、データベースにクエリを実行すると、新しい製品は、関連付けようとしている以前のカテゴリと同じ値を持つ新しいカテゴリと関係があります。私は答えを探しましたが、例で使用されているのと同じメソッドを持っていないため、例はうまくいきません。エンティティを使用しているためPOCOか、よくわかりません。

4

2 に答える 2

1

コードについていくつかの仮定を立てましたが、おそらくこれらの方法のいずれかが役立つでしょう。

  1. 新しい Product インスタンスを作成するときに、CategoryId などの外部キー値を既存の Category Id に設定できます。

  2. ナビゲーション プロパティ "Product.Category" を設定する場合は、次のことを確認する必要があります。

Context.Categories.Attach参照される Category インスタンスは、 を使用するか、最初にコンテキストを介して取得することにより、コンテキストによって所有されている必要があります。Context.Categories.FirstOrDefault(c => c.id == 1)

Product.CategoryCategory の切断されたインスタンスと等しい値を設定すると、コンテキストは参照されたインスタンスを自動的に追加しようとします。

于 2012-08-28T06:33:55.543 に答える
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();
        }
    }
于 2012-08-28T19:38:13.603 に答える