我试图想出一个更好的头衔,但不能。
问题是我是Azure功能的新手,但做了一个简单的工作,写入SQL Azure表。现在,我尝试构建最简单的基于实体框架的Datalayer并上传它。现在它被编译为.Net 4.6并使用EF 6.1.3。
我按照Second answer的第二个答案使用了连接字符串,并检查了它是否正确检索。 更新 - 我还使用了this guide。
删除此{#r" D:\ home \ site \ wwwroot \ _ sharedbin \ TestDataLayer.dll"}会导致编辑器抱怨缺少程序集,因此它正在查找有问题的dll。
但是它不会运行 - 它找不到TestDataLayer.dll。
我只在门户网站编辑器中运行它(我还没有直接从Visual Studio项目中掌握部署 - 不要笑:P)。
#r "System.Configuration"
#r "System.Data.Entity"
#r "D:\home\site\wwwroot\sharedbin\TestDataLayer.dll"
using System;
using System.Collections;
using System.Configuration;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.Entity.SqlServer;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using System.Net;
using TestDataLayer;
public static void Run(TimerInfo myTimer, TraceWriter log)
{
var connection = ConfigurationManager.ConnectionStrings["sql_connection"].ConnectionString;
using(var db = new SyncDbContext(connection))
{
var RK = new RKAzureTest() {TestField1 = "It finally worked?" };
db.RKAzureTests.Add(RK);
db.SaveChanges();
}
}
[DbConfigurationType(typeof(myDBContextConfig))]
public partial class SyncDbContext : System.Data.Entity.DbContext
{
public SyncDbContext(string cs) : base(cs) {}
public DbSet<RKAzureTest> RKAzureTests {get;set;}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
public class myDBContextConfig : DbConfiguration
{
public myDBContextConfig()
{
SetProviderServices("System.Data.EntityClient",
System.Data.Entity.SqlServer.SqlProviderServices.Instance);
SetDefaultConnectionFactory(new System.Data.Entity.Infrastructure.SqlConnectionFactory());
}
}
这是function.json:
{
"frameworks": {
"net46":{
"dependencies": {
"EntityFramework": "6.1.3"
}
}
}
}
我怀疑Azure Functions不支持.net 4.7.1并通过Kudu将已编译的dll上传到sharedbin文件夹(检查路径a)后,我已将dll本身编译为.Net 4.6十几次!)。
这是抛出的错误:
2018-05-01T11:00:00.012 [Warning] Unable to find assembly 'TestDataLayer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Are you missing a private assembly file?
2018-05-01T11:00:00.012 [Error] Exception while executing function: Functions.TimerTriggerCSharp1. mscorlib: Exception has been thrown by the target of an invocation. f-TimerTriggerCSharp1__514732255: Could not load file or assembly 'TestDataLayer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
不太确定还剩下什么 - 我在应用程序设置中使用运行时版本1.0.11702,因为我发现如果我进入Beta版本,生活会变得更复杂。
如果有人能指出这个用例的工作指南(数据库优先,EF 6.1.3等),我将不胜感激。
感谢所提供的任何帮助!
谢谢:)
答案 0 :(得分:2)
转到Azure门户,创建一个名为“&#39; bin&#39;在使用CMD Shell的Azure功能中,上传&#39; TestDataLayer.dll&#39;刚刚创建的文件到bin文件夹。
#r "System.Configuration"
#r "System.Data.Entity"
#r "TestDataLayer.dll"
项目结构应该如下,
AzureFunctionProjectName001
bin
TestDataLayer.dll
run.csx
project.json
project.lock.json
...
这次Azure功能应该能够发现您的库。我相信,EntityFramework工作正常。