When I call DbSet.FirstOrDefault()
by passing a predicate that compares generic type TId
, I get the following exception:
unable to create a constant value of type 'system.object'. only primitive types or enumeration types are supported in this context.
Interface for type being queried:
interface IEntity<TId>
{
TId id { get; set; }
}
The exception is thrown here:
public virtual TEntity Get<TEntity, TId>(TId id) where TEntity : class, IEntity<TId>
{
return dbContext.Set<TEntity>().FirstOrDefault(e => e.Id.Equals(id));
}
The function will only work if TId
is constrained as struct
. How can I include string
as supported type? If it's not possible, is it possible to accomplish the task a different way?