我有一个 findById()
方法的通用版本( KeyType
和 EntityType
是类级别的模板参数):
public EntityType findById(KeyType key)
{
log.LogDebugStart();
log.LogDebug("id=" + key);
EntityType data;
using (ObjectContextWrapper contextWrapper = TransactionHelper.GetContextWrapper())
{
Entities bdd = contextWrapper.GetContext();
DbSet<EntityType> set = bdd.Set<EntityType>();
data = set.Find(key);
}
log.LogDebugEnd();
return data;
}
它适用于单列键(例如:KeyType = long),但我无法使用复合主键(例如:KeyType:long[])。
我得到的异常(exception):
实体是在
.edmx
文件的帮助下从数据库生成的。在我的例子中,两列都设置为主键。在调试器中,我很清楚地看到 key 的类型是 short[2]。我认为这可能与我的方法不接受“params”参数的事实有关,并且整个数组将以某种方式作为单个参数传递给
Find()
方法,但只要我通过,它应该没问题我的 findById()
方法的数组... 最佳答案
您需要将键值转换为对象数组,即 object[]
。
我建议你更换这个:
data = set.Find(key);
有了这个:
if(key is Array)
{
data = set.Find((key as IEnumerable).Cast<object>().ToArray());
}
else
{
data = set.Find(key);
}
关于c# - 具有 Entity Framework 和复合键的通用 findById,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33436731/