.Net - Is it possible to use IComparable to entities in Entity Framework?
I have a POCO class that implements IComparable.
There in DbSet for my POCO class in my DbContext.
However, when I try to do something like the following I get a
System.NotSupportedException
private TEntity Exists(TEntity entity)
{
return Context.DbSet<TEntity>.FirstOrDefult(i => i.CompareTo(entity)
== 0);
}
The exception stack trace looks like...
System.NotSupportedException was unhandled by user code
Message=Unable to create a constant value of type '{My POCO Class}'.
Only primitive types or enumeration types are supported in this context.
Source=System.Data.Entity
StackTrace:
at
System.Data.Objects.ELinq.ExpressionConverter.ConstantTranslator.TypedTranslate(ExpressionConverter
parent, ConstantExpression linq)
at
System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter
parent, Expression linq)
at
System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression
linq)
at
System.Data.Objects.ELinq.ExpressionConverter.EqualsTranslator.TypedTranslate(ExpressionConverter
parent, BinaryExpression linq)
at
System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter
parent, Expression linq)
at
System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression
linq)
at
System.Data.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression
lambda, DbExpression input)
at
System.Data.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression
lambda, DbExpression input, DbExpressionBinding& binding)
at
System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter
parent, MethodCallExpression call, DbExpression& source,
DbExpressionBinding& sourceBinding, DbExpression& lambda)
at
System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.FirstPredicateTranslatorBase.Translate(ExpressionConverter
parent, MethodCallExpression call)
at
System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter
parent, MethodCallExpression call, SequenceMethod sequenceMethod)
at
System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter
parent, MethodCallExpression linq)
at
System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter
parent, Expression linq)
at
System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression
linq)
at System.Data.Objects.ELinq.ExpressionConverter.Convert()
at
System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1
forMergeOption)
at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1
forMergeOption)
at
System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1
source)
at
System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__1[TResult](IEnumerable`1
sequence)
at
System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1
query, Expression queryRoot)
at
System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression
expression)
at
System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](Expression
expression)
at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1
source, Expression`1 predicate)
I've read the Entity Framework doesn't support IComparable? Is there
anyway around this or does anyone know whether the functionality will be
available in EF6?
No comments:
Post a Comment