如何将 Automapper 与 EntityFramework 6.1.3 结合使用来投影自定义 (UDF) DbFunciton 调用?
How could one use Automapper with EntityFramework 6.1.3 to project custom (UDF) DbFunciton calls?
我正在使用这个 Nuget 库:
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);
}
}
当我 运行 此代码使用投影时:
</code>IMappingExpression mapperExpression = ...(omitted)
mapperExpression.ForMember(dest => dest.ContactNote, opt => opt.MapFrom(entity => DbCore.DbDecodeBase64(entity.ContactNote)));</pre>
<p>然后我有一个 SQL 函数 (UDF) 调用:<code>DecodeBase64
我所做的一切都是正确的,但是我的 LINQ 正在生成一个不再是 IQueryable 的对象,这导致这些函数不是 called/generated 和 SQL。
所以,简而言之。问题就是答案,如果您对此有任何疑问,请确保您在调用这些函数时仍在使用 IQueryable 对象。
我正在使用这个 Nuget 库:
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);
}
}
当我 运行 此代码使用投影时:
</code>IMappingExpression mapperExpression = ...(omitted)
mapperExpression.ForMember(dest => dest.ContactNote, opt => opt.MapFrom(entity => DbCore.DbDecodeBase64(entity.ContactNote)));</pre>
<p>然后我有一个 SQL 函数 (UDF) 调用:<code>DecodeBase64
我所做的一切都是正确的,但是我的 LINQ 正在生成一个不再是 IQueryable 的对象,这导致这些函数不是 called/generated 和 SQL。
所以,简而言之。问题就是答案,如果您对此有任何疑问,请确保您在调用这些函数时仍在使用 IQueryable 对象。