この記事の内容
FunctionsでADO.NETとEntityFrameworkを使いたかったけど調べてもなかなか出てこなかったので記事に残しておきます。
今回の方法以外にもADO.NETを使用しなければこういった方法の接続方法もありますので参考までに
Azure portal の Functions に書いたスクリプト
設定値
partialClass でEntitiesクラスに設定を追加します
Entities.cs
[DbConfigurationType(typeof(MyDbContextConfig))]
public partial class Entities : DbContext
{
public Entities(string connectionString) : base(connectionString)
{
}
}
元の自動生成されたEntitiesクラスは
Entities.cs
public Entities() : base("name=Entities")
{
}
となっている為引数を増やしオーバーロードします。
次にMyDbContextConfigクラスを作ります
MyDbContextConfig.cs
public class MyDbContextConfig : DbConfiguration
{
public MyDbContextConfig()
{
SetProviderServices("System.Data.EntityClient",
SqlProviderServices.Instance);
SetDefaultConnectionFactory(new SqlConnectionFactory());
}
}
使い方
Main.cs
var connectionString = ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
using(var db = new Entities(connectionString))
{
// dbの処理
var userList = (from n in db.user_info select n).ToList();
}
Azureの設定
接続文字列をそのまま入れるだけでは動かないので少し書き方を変えてやる必要があります。
local.settings.json
"ConnectionStrings": {
"Entities": "metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source={server-name}.database.windows.net;initial catalog={db-name};persist security info=True;user id={username};password={password};MultipleActiveResultSets=True;App=EntityFramework'"
}
Azureのアプリケーション設定にも同様の値を入れておけば完了です。