按ID分类的EF4通用搜索

时间:2010-06-21 16:04:33

标签: entity-framework-4

我有x个表,所有表都有uniqueidentifier / guid主键。我想写一个泛型函数,它将采用Guid param id,其中T是EntityObject,就像这样......

public T SelectById<T>(Guid id) where T : EntityObject

这似乎是一件简单的事情。我已经在互联网上搜索,但是找不到办法,更不用说优雅了。我在这里错过了什么,为什么这很难?

1 个答案:

答案 0 :(得分:3)

为了实现这一点,您需要确保您的实体上的ID属性符合命名约定,例如Id或EntityName_Id。然后你要做的就是使用一点反射来构建EntityKey。

         ObjectStateEntry entry;

        var entityKey = new EntityKey(Context.DefaultContainerName + "." + typeof(T).Name, "Id", id);

        object entity = null;
        if (!Context.ObjectStateManager.TryGetObjectStateEntry(entityKey, out entry) || entry.Entity == null)
        {
            try
            {
                entity = Context.GetObjectByKey(entityKey);    
            }
            catch (ObjectNotFoundException)
            {

            }

        }

        return (T)entity;