代码之家  ›  专栏  ›  技术社区  ›  Pablo Castilla

EF4.0向上下文添加对象时出现问题

  •  0
  • Pablo Castilla  · 技术社区  · 15 年前

    我为ef做了一个通用的保存函数:

    public void Save(T entity)
        {
            using (C context = new C())
            {
                string entitySetName = context.FindEntitySetByEntity<T>();
    
                T entityInDDBB = GetEntityByKey(entity, entitySetName, context);
    
                //if we didn't find the entity in database make an insert, if not an update.
                if (entityInDDBB == null)
                {
    
                    **context.AddObject(entitySetName, entity);**
                }
                else
                {
                    context.ApplyCurrentValues(entitySetName,  entity);
                }
    
                context.SaveChanges();
            }
        } 
    

    问题是,如果我们将派生类型传递给addobject(f.e:teacher),但映射预期会有人出错。

    我怎样才能将类型改为对象(我想如果不创建一个新的对象是不可能的),或者你知道其他使它工作的方法吗?

    当做。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Alex James    15 年前

    嗯,ef不允许你把一个clr类当作另一个。

    也就是说,你不能把老师当人看待。

    鉴于这一限制,教师也必须是一个实体,如果不是,这将永远失败。

    但从你的描述来看,你似乎没有教师实体或教师地图信息?

    不幸的是,没有办法解决这个问题。

    亚历克斯

    注意:如果您有一个教师实体和映射,您的代码应该可以正常工作。 如果 FindEntitySetByEntity<Teacher>() 返回与相同的 FindEntitySetByEntity<Person>() .

        2
  •  1
  •   Thomas Levesque    15 年前

    确保在实体数据模型中正确定义了继承关系。这是一篇很好的文章:

    http://blogs.msdn.com/adonet/archive/2007/03/15/inheritance-in-the-entity-framework.aspx