代码之家  ›  专栏  ›  技术社区  ›  Eric J.

ef 4、poco和addorupdate

  •  1
  • Eric J.  · 技术社区  · 14 年前

    我正在尝试在一个名为addorupdate的EF4 POCO存储库上创建一个方法。

    其思想是业务层可以传入一个POCO对象,如果对象是新的(还没有在数据库中),持久性框架将添加该对象,否则将使用新值更新数据库(调用savechanges()。这和我问过的其他一些关于英孚的问题类似,但我只有80%的人理解这一点,所以请原谅部分重复。

    我缺少的部分是,一旦确定业务对象确实存在于数据库中(现在由于TryGetObjectByKey已加载),如何在我的ObjectContext/关联的对象集中更新传入业务对象的对象图。ApplyCurrentValues听起来有点像我想要的,但它只复制标量值,似乎不打算更新ObjectContext/ObjectSet中的对象图。因为我的特殊用例,我现在不关心并发性。

    public void AddOrUpdate(BO biz)
    {
        object obj;
    
        EntityKey ek = Ctx.CreateEntityKey(mySetName, biz);
        bool found = Ctx.TryGetObjectByKey(ek, out obj);
    
        if (found)
        {
            // How do I do what this method name implies?  Biz is a parent with children.
            mySet.TellTheSetToUpdateThisObject(biz);
        }
        else
        {
            mySet.AddObject(biz);
        }
    
        Ctx.DetectChanges();
    }
    
    2 回复  |  直到 14 年前
        1
  •  0
  •   Craig Stuntz    14 年前

    您必须为此编写代码。没有任何内置内容可以复制整个图形。正如你所说的, ApplyCurrentValues 对于标量值可以正常工作。你得模仿自己的孩子们。

        2
  •  0
  •   Eric J.    14 年前

    问题是,我的业务对象使用new()运算符来分配子对象,而不是从ObjectContext构造对象。如果您不能使用new(),那么这不是真正的poco行为,但至少它在一些重构之后工作。