DbSet doesn't have a Find method in EF7

后端 未结 11 1764
醉话见心
醉话见心 2020-12-03 04:28

I am trying to create a generic repository to access my database. In EF6 I was able to do that in order to get a specific entity:

protected IDbSet d         


        
11条回答
  •  萌比男神i
    2020-12-03 05:08

    So...the above find methods worked great, but if you don't have a column named "Id" in your model, the whole thing is going to fail on the following line. I'm not sure why the OP would have put a hardcoded value into this spot

      Expression.Property(parameter, "Id"),
    

    Here's a revision that will fix it for those that name our Id columns appropriately. :)

    var keyCompare = key.Properties[0].Name;
    
            // TODO: Build the real LINQ Expression
            // set.Where(x => x.Id == keyValues[0]);
            var parameter = Expression.Parameter(typeof(TEntity), "x");
            var query = set.Where((Expression>)
                Expression.Lambda(
                    Expression.Equal(
                        Expression.Property(parameter, keyCompare),
                        //Expression.Property(parameter, "Id"),
                        Expression.Constant(keyValues[0])),
                    parameter));
    
            // Look in the database
            return query.FirstOrDefault();
        }
    

    This STILL very well could fail if you have more than one Key setup on the entity object and the key you're looking up by isn't the first, but it should be quite a bit btter this way.

提交回复
热议问题