【发布时间】:2013-05-15 10:30:03
【问题描述】:
在我的通用存储库中,我需要编写通用 Save 方法,该方法将根据 id 编辑现有实体或添加新实体。
public void Save<T>(T entity) where T : TEntity, IKeyId
{
if (ObjectSet.Any(r => (r as IKeyId).KeyId == entity.KeyId))
{
Edit(entity);
}
else
{
Add(entity);
}
}
但是当我尝试执行Any( r=> (r as IKeyId)... 时,Linq 会产生异常。
不支持具有“MyProg.DAL.Appeal”类型输入和“Claimstrak.DAL.Interfaces.IKeyId”类型检查的“TypeAs”表达式。 LINQ to Entities 查询仅支持实体类型和复杂类型。
如何正确写法?
【问题讨论】:
-
嗯,例外很明显,你不能在 linq 中使用接口转换为实体......现在,要找到解决方案,需要更多代码(了解如何以及为什么使用例如,ObjectSet)会很有用。
-
你知道 EF 会告诉你一个实体是新的、修改的还是删除的。
-
我知道。 Unforchenatly 我在该表中的密钥(id)不是自己的 id。列是对另一个表的引用,不是标识。
标签: asp.net-mvc linq entity-framework generics asp.net-mvc-4