2010-01-11 63 views
0

我做了一个通用的保存功能的EF:EF 4.0问题将对象上下文

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(FE:老师),但映射预计人它会抛出一个错误。

我怎样才能改变类型的对象(我想这是不可能的,而不需要创建一个新的),或者你知道任何其他方式使其工作?

问候。

+0

你得到的错误信息是什么? – 2010-01-11 17:51:46

回答

2

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

即,您不能将教师视为人。

鉴于此限制教师也必须是实体,否则这将始终失败。

但是从您的描述来看,您听起来好像没有教师实体或教师映射信息?

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

亚历

注:您的代码应正常工作,如果你有一个老师实体和映射如果FindEntitySetByEntity<Teacher>()回报一样FindEntitySetByEntity<Person>()