Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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# 实体框架只能在部署到Azure时才能连接到新表?_C#_Sql Server_Entity Framework_Azure_Webdeploy - Fatal编程技术网

C# 实体框架只能在部署到Azure时才能连接到新表?

C# 实体框架只能在部署到Azure时才能连接到新表?,c#,sql-server,entity-framework,azure,webdeploy,C#,Sql Server,Entity Framework,Azure,Webdeploy,我正在运行EntityFramework6.1.2,我似乎陷入了困境。我使用的是代码优先的方法 我有一个网站,它使用一个数据库和两个表,在本地和部署到Azure上都可以正常工作。然后我试着添加一个新的模型,那就是事情崩溃的时候。我放弃了代码优先迁移,因为在几个小时的阅读和尝试包管理控制台中的许多必要步骤(每个db上下文3个步骤)之后,生成的迁移文件总是出错。通常为空,Up/Down方法中根本没有代码 就在那时,我尝试了手动方法。首先,我尝试在Azure上删除并重新创建数据库。起初我认为这是可行的

我正在运行EntityFramework6.1.2,我似乎陷入了困境。我使用的是代码优先的方法

我有一个网站,它使用一个数据库和两个表,在本地和部署到Azure上都可以正常工作。然后我试着添加一个新的模型,那就是事情崩溃的时候。我放弃了代码优先迁移,因为在几个小时的阅读和尝试包管理控制台中的许多必要步骤(每个db上下文3个步骤)之后,生成的迁移文件总是出错。通常为空,Up/Down方法中根本没有代码

就在那时,我尝试了手动方法。首先,我尝试在Azure上删除并重新创建数据库。起初我认为这是可行的,但出于某种奇怪的原因,只有两个原始表由实体框架重新创建。未创建新表以及由于新模型中的嵌套类而自动引用的子表

出于沮丧,我手动创建了两个新表,方法是从SQL Designer窗口复制新表和子表的SQL查询,然后对Azure服务器执行这两个查询。这很有效,我确实在我的Azure SQL server实例上成功地创建了表。但是,我的网站代码无法与新表连接。它可以连接到两个旧表,但不能连接到新表及其子表

请记住,此代码在本地执行良好,但在Azure上运行时,任何针对新表的查询都会失败,并显示以下模糊的错误消息:

错误:与SQL Server建立连接时发生网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。提供程序:SQL网络接口,错误:52-找不到本地数据库运行时安装。验证SQL Server Express是否已正确安装,以及本地数据库运行时功能是否已启用。内部异常:系统找不到指定的文件

我使用数据库上下文作为连接字符串,为新表添加了一个新的连接字符串。正如我所说,当在本地运行时,一切都很好。但为什么我在Azure上运行它会失败呢

如果我没有做到这一点,那么如果我删除Azure上的数据库并再次重新创建,是否有一种简单易行的方法可以让Entity Framework在发布/部署期间在Azure上重新创建所有taables

这是我遇到问题的新表的模型:

public class ImageSearchResultWrapper : ModelsBase
{
    public ImageSearchResultWrapper()
        : base()
    {

    }

    [Index, StringLength(60)]
    public string SearchQuery { get; set; }

    public ImageResult ImageSearchResult { get; set; }
} // public class SearchResultWrapper

public class ImageSearchResultDBContext : DbContext
{
    public ImageSearchResultDBContext()
        : base("name=ImageSearchResultDBContext")
    {

    }

    public DbSet<ImageSearchResultWrapper> ImageSearchResults { get; set; }
}
下面是它的连接字符串:

<add name="ImageSearchResultDBContext" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-TruxWebSite-20141228220711.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />

向我们显示模型和连接字符串。当您在azure上执行部署时,是否选择将数据库迁移到最新版本的选项?azure将LocalDB的连接字符串替换为azure的正确连接字符串,但除非您指定,否则不会自动“迁移”数据库。@Robert请发布产品连接字符串,而不是开发人员one@zaitsman这就是问题所在。没有。我进入“发布Web”对话框,检查每个表,新表没有连接字符串。我猜当我第一次创建发布配置文件时,系统会提示我输入生产连接字符串。如果手动添加新表,则必须进入“发布Web”对话框,并为每个新表添加连接到该表所需的生产连接字符串。因此,发布操作不知道用什么替换LocalDB conn.string。现在可以使用了。@AndrewCounts这不是更新数据库问题,而是连接字符串问题。请看我对zaitsman的回复,谢谢。