我有一个 findById() 方法的通用版本( KeyTypeEntityType 是类级别的模板参数):

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/

10-10 23:23