Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VisualStudio中Azure函数中的实体框架_C#_Entity Framework_Azure - Fatal编程技术网

C# VisualStudio中Azure函数中的实体框架

C# VisualStudio中Azure函数中的实体框架,c#,entity-framework,azure,C#,Entity Framework,Azure,在VisualStudio中,我有一个用C#编写的Azure函数,它应该使用实体框架(EF6)从Azure SQL数据库中读取 我无法让实体框架工作。发布Azure函数时,出现以下错误: 上下文在代码优先模式下使用,代码是从EDMX文件生成的,用于数据库优先或模型优先开发。这将无法正常工作。要解决此问题,请不要删除引发此异常的代码行。如果希望首先使用数据库或模型,请确保启动项目的app.config或web.config中包含实体框架连接字符串。如果要创建自己的DbConnection,请确保它

在VisualStudio中,我有一个用C#编写的Azure函数,它应该使用实体框架(EF6)从Azure SQL数据库中读取

我无法让实体框架工作。发布Azure函数时,出现以下错误:

上下文在代码优先模式下使用,代码是从EDMX文件生成的,用于数据库优先或模型优先开发。这将无法正常工作。要解决此问题,请不要删除引发此异常的代码行。如果希望首先使用数据库或模型,请确保启动项目的app.config或web.config中包含实体框架连接字符串。如果要创建自己的DbConnection,请确保它是EntityConnection而不是其他类型的DbConnection,并将其传递给采用DbConnection的一个基本DbContext构造函数。要了解有关代码优先、数据库优先和模型优先的更多信息,请参阅此处的实体框架文档:

所有这些都不起作用

我还尝试按照许多网站的建议在Azure中添加project.json文件,但这并没有改变任何事情

这是C


根据您的描述,我假设您首先使用数据库或模型,并且为您的实体数据模型配置了错误的实体框架连接字符串。我测试并发现,如果我的用户在使用数据库时直接从Azure Portal复制连接字符串,我将遇到类似的问题,您提供的问题如下:

public partial class Entities : DbContext
{
    public Entities():base(ConfigurationManager.ConnectionStrings["Entities"].ConnectionString)
    {

    }
}
"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'"
}

对于Database First,我建议您修改生成的
Model.Content.cs
,并按如下方式配置DbContext:

public partial class Entities : DbContext
{
    public Entities():base(ConfigurationManager.ConnectionStrings["Entities"].ConnectionString)
    {

    }
}
"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'"
}
注意:您可以修改t4模板,并确保在从数据库更新模型后不会覆盖对DbContext的修改

对于dev,您可以在
local.settings.json
文件下设置连接字符串,如下所示:

public partial class Entities : DbContext
{
    public Entities():base(ConfigurationManager.ConnectionStrings["Entities"].ConnectionString)
    {

    }
}
"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之前,您可以创建一个连接字符串,该字符串与您在
local.settings.json
文件下配置的相同,并按如下方式设置连接字符串:

public partial class Entities : DbContext
{
    public Entities():base(ConfigurationManager.ConnectionStrings["Entities"].ConnectionString)
    {

    }
}
"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函数中使用EF Database First时,您也可以遵循类似的方法。

因为我很难设置它,即使在这里发布的是完整的版本

project1(azure功能): local.settings.json

项目2(dll): Model1.Context.cs

现在重命名: -连接字符串名称 -服务器名 -数据库名 -用户名 -密码


所以我后来也记得;)

edml dll是与Visual Studio中的包一起部署的。可能是与quotecandyEntities()相关的类未被复制。我对Azure相对较新。在哪里可以看到部署了哪些文件?可以使用kudu浏览器查看部署了哪些文件。用户可以访问Kudu,您可以使用Kudu浏览器查看部署了哪些文件。在Kudu中可以访问Kudu一次,您可以转到调试控制台-选择cmd。这将打开一个bash窗口。这提供了kuduUnder的概述D:\home\site\wwwroot\bin\I看到这些文件:Dolaris.QuoteCandy.EDM.dll,Dolaris.QuoteCandy.EDM.dll.config EntityFramework.dll,EntityFramework.SqlServer.dll,EntityFramework.xml,Microsoft.Data.EDM.dll,Microsoft.Data.OData.dll将连接字符串包含在代码本身中,而不是设置中,工作正常!非常感谢。这对我有用。只是一个小小的添加,我不得不使用System.Configuration向我的tt/cs文件添加一个
语句,并添加一个程序集引用,因为我的数据项目没有引用这个dll。谢谢