2016-04-29 5 views
1

Я использую эту библиотеку NuGet:Как можно использовать Automapper с EntityFramework 6.1.3 для создания пользовательских (UDF) вызовов DbFunciton?

EntityFramework.CodeFirstStoreFunctions

этот код:

public abstract class DbCore : DbContext { 
    [DbFunction("CodeFirstDatabaseSchema", "DecodeBase64")] 
    public static string DbDecodeBase64(string encoded) { 
      throw new NotSupportedException(); 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
      modelBuilder.Conventions.Add(new FunctionsConvention("dbo")); 
      base.OnModelCreating(modelBuilder); 
    } 
} 

Когда я запускаю этот код с помощью проекции:

IMappingExpression mapperExpression = ...(omitted) 
mapperExpression.ForMember(dest => dest.ContactNote, opt => opt.MapFrom(entity => DbCore.DbDecodeBase64(entity.ContactNote)));

Тогда у меня есть функция SQL (UDF): DecodeBase64

ответ

0

Все, что я делал, было правильным, но мой LINQ создавал объект, который больше не был IQueryable, что заставляло эти функции не вызываться/не генерироваться как SQL.

Итак, одним словом. Вопрос заключается в ответе, и если у вас возникли какие-либо проблемы с этим, убедитесь, что вы все еще используете объекты IQueryable при вызове этих функций.