如何防止EF尝试在我的模型上映射方法?

时间:2011-04-16 13:09:11

标签: entity-framework linq-to-entities entity-framework-4.1

所以,我有一个“Speaker”类,具有正常的属性,以及一个像这样的普通方法:

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

我正在使用Entity Framework Code First Magic Unicorn版本,我收到此错误:

  

System.NotSupportedException:LINQ to   实体无法识别该方法   'System.String FullNameFirstLast()'   方法,这个方法不能   翻译成商店表达。

这看起来很奇怪,因为它是一种方法而不是属性,所以我想知道为什么EF会关心它...所以我试着告诉EF忽略它:

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

这没有帮助,因为现在我收到此错误消息:

  

System.InvalidOperationException:The   表达式'ignore =&gt;   ignore.FullNameFirstLast()'不是   有效的属性表达。该   表达应该代表一个   property:C#:'t =&gt; t.MyProperty”   VB.Net:'Function(t)t.MyProperty'。

我该怎么做?我假设我可以使用EF在我的模型对象上有方法,对吧?

1 个答案:

答案 0 :(得分:5)

这不是映射问题。在Linq-to-entities查询中使用该方法的问题。您不能在Linq-to-entities查询中使用自定义方法或自定义属性,因为EF提供程序不知道如何将它们转换为SQL。