我为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,则会抛出错误。
我怎样才能将类型更改为对象(我想如果不创建新的类型就不可能)或者您是否知道其他方法可以使其工作?
问候。
答案 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