我正在尝试将一些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) 我正在将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