EF 4.0问题将对象添加到上下文中

时间:2010-01-11 16:32:53

标签: .net entity-framework

我为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),但映射需要Person,则会抛出错误。

我怎样才能将类型更改为对象(我想如果不创建新的类型就不可能)或者您是否知道其他方法可以使其工作?

问候。

2 个答案:

答案 0 :(得分:2)

EF不允许您将一个CLR类视为另一个CLR类。

即。你不能把老师视为人。

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

但是根据您的描述,听起来您没有教师实体或教师的映射信息?

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

亚历

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

答案 1 :(得分:1)

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

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