как предотвратить EF от попытки сопоставить метод на моей модели? - PullRequest
2 голосов
/ 16 апреля 2011

Итак, у меня есть класс "Speaker" с обычными свойствами и простой старый метод, подобный этому:

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

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

System.NotSupportedException: LINQ to Сущности не распознают метод 'System.String FullNameFirstLast ()' метод, и этот метод не может быть переведено в магазинное выражение.

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

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

Что не помогает, потому что теперь я получаю это сообщение об ошибке:

System.InvalidOperationException: выражение 'игнорировать => ignore.FullNameFirstLast () 'не является допустимое выражение свойства. выражение должно представлять свойство: C #: 't => t.MyProperty' VB.Net: «Функция (t) t.MyProperty».

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

1 Ответ

5 голосов
/ 16 апреля 2011

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

...