2

Итак, у меня есть класс «Speaker», с нормальными свойствами, и старый добрый метод как это:Как предотвратить EF от попытки сопоставить метод на моей модели?

public string FullNameFirstLast() 
{ 
    return FirstName + " " + LastName; 
} 

Я использую Entity Framework Code First Волшебное Unicorn издание, и я получаю эту ошибку :

System.NotSupportedException: LINQ to Entities does not recognize the method 'System.String FullNameFirstLast()' method, and this method cannot be translated into a store expression.

что кажется странным, так как это метод, а не свойство, так что я удивляюсь, почему EF будет заботиться о нем так или иначе ... так что я попытался говорить EF, чтобы игнорировать его, как так:

modelBuilder.Entity<Speaker>() 
     .Ignore(ignore => ignore.FullNameFirstLast()) 
     ; 

Который не помогает, потому что теперь я получаю сообщение об ошибке вместо:

System.InvalidOperationException: The expression 'ignore => ignore.FullNameFirstLast()' is not a valid property expression. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'.

Как это сделать? Я предполагаю, что у меня могут быть методы на объектах модели с EF, правильно?

ответ

5

Это не проблема картирования. Это проблема использования метода в запросе Linq-to-entities. Вы не можете использовать пользовательские методы или настраиваемые свойства в запросе Linq-to-entities, потому что поставщик EF не знает, как перевести их на SQL.

+0

Да. благодаря! Я не обращался к нему напрямую, но я использовал, где у меня был _repo.Speakers(). OrderBy (...), используя этот метод. по-видимому, EF пытается пройти по порядку SQL, и поэтому возникла эта проблема. Мне нужно было сначала материализовать данные из БД, ТОГДА его сортировать. благодаря! –

Смежные вопросы