小编bec*_*ech的帖子

如何在Azure函数中指定EntityFramework ProviderName

我正在尝试将一些webjob代码移植到新的Azure Functions.到目前为止,我已成功导入我的DLL并成功引用它们,但是当我在代码中使用连接字符串时,我收到一条错误消息,说我必须添加ProviderName:

应用程序配置文件中的连接字符串"ConnectionString"不包含必需的providerName属性."

这通常不是问题,因为在webjob(或Web应用程序)中,这将在App或Web.config中,并且连接字符串将被我在Azure中输入的任何内容覆盖.

使用Azure Functions,我没有web.config(虽然我尝试添加一个无效),所以自然缺少providername.

我该如何指定?

编辑: 经过一些游戏和下面的人的一些有用的提示,我几乎设法让它工作.

我现在做的是以下内容:

    var connString = **MY CONN STRING FROM CONFIG**; // Constring without metadata etc.
    EntityConnectionStringBuilder b = new EntityConnectionStringBuilder();
    b.Metadata = "res://*/Entities.MyDB.csdl|res://*/Entities.MyDB.ssdl|res://*/Entities.MyDB.msl";
    b.ProviderConnectionString = connString.ConnectionString;
    b.Provider = "System.Data.SqlClient";
    return new MyDB(b.ConnectionString);
Run Code Online (Sandbox Code Playgroud)

这给了我调用数据库所需的内容.我在一个局部类中使用静态方法来获取运行上面代码的数据库实例,然后我用我的MyDB Partial装饰 [DbConfigurationType(typeof(MyDbConfiguration))]

我将该配置定义为:

public class MyDBConfiguration: DbConfiguration
{
    public MyDBConfiguration()
    {
        SetProviderFactory("System.Data.EntityClient", EntityProviderFactory.Instance);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我想要实际使用EF实体时,我的问题仍然存在.在这里,它将尝试使用原始配置初始化数据库类型,再次给我原始错误.根据此堆栈跟踪:

at Void Initialize()
at System.Data.Entity.Internal.EntitySetTypePair GetEntitySetAndBaseTypeForType(System.Type)
at Void InitializeContext()
at System.Data.Entity.Core.Objects.ObjectContext CreateObjectContextFromConnectionModel()
at Void Initialize()
at Boolean …
Run Code Online (Sandbox Code Playgroud)

configuration entity-framework function azure-functions

9
推荐指数
1
解决办法
3388
查看次数

将Web API转换为Azure函数的最佳方法?

我正在将WebAPI终结点转换为Azure函数。我们的WebApi具有许多处理身份验证的自定义属性,如何将它们转换为Azure函数?

例如,这是AuthorizeAttribute:

public class MyAuthorizationAttribute : AuthorizeAttribute
{
        public override async Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
        {
            if (!AuthorizationHelper.SkipAuthorization(actionContext))
            {
                // Some auth logic here generating a ClaimsPrincipal omitted..
                HttpContext.Current.User = principal;
                await base.OnAuthorizationAsync(actionContext,cancellationToken);
            }
       }
}
Run Code Online (Sandbox Code Playgroud)

在WebAPI中:HttpContext.Current.User获取调用用户在Azure函数中:没有HttpContext

c# azure asp.net-web-api azure-functions

5
推荐指数
0
解决办法
892
查看次数