【问题标题】:Developing with Azure Mobile Services in a local computer[.Net backend]在本地计算机中使用 Azure 移动服务进行开发 [.Net 后端]
【发布时间】:2014-09-03 14:50:23
【问题描述】:

我正在使用 Azure 移动服务开发云服务,为了快速对其进行测试和调试,我想将其部署在我的本地计算机中。我选择项目,按 F5,让它在我本地 PC 的 IIS express 中运行。我针对 IIS 服务的本地 URI 地址执行客户端,当我尝试插入值时,如果我尝试检索或插入新对象,则会出现此异常:

An exception of type 'System.ArgumentException' occurred in EntityFramework.SqlServer.dll but was not handled in user code 

Additional information: The database name 'TR_MyTrip_Server_ExtraData_Service]_Persons_InsertUpdateDelete' is invalid. Database names must be of the form [<schema_name>.]<object_name>.

我调试了控制器的初始化,发现移动服务在 ServiceContext 对象的 DataBase 属性上部署了一个带有此连接信息的 LocalDb 实例:

Data Source=(localdb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-MyTrip.Server.ExtraData.Service-20140731060708.mdf;Initial Catalog=aspnet-TestProject.Server.ExtraData.Service-20140731060708;Integrated Security=True;MultipleActiveResultSets=True

如果我尝试通过 SQL Management Studio 将此连接字符串连接到 LocalDB,则无法找到此数据库

我可以使用 SQL 管理工作室在 CMD 上运行此命令并检索 LocalDB 的连接来访问 LocalDb 实例

SqlLocalDB.exe info v11.0

不管怎样,在 SQL Management Studio 上,我都看不到任何与我的移动服务控制器相关的数据库。我在谷歌上搜索,我发现的唯一相关链接是this,但不工作......有人知道发生了什么吗?

非常感谢

【问题讨论】:

    标签: c# azure azure-mobile-services


    【解决方案1】:

    当您的项目名称中包含句点时,这是一个问题。像 TestProject.Server.ExtraData.Service。

    要解决此问题,请进入 web.config 并编辑名为“MS_MobileServiceName”的应用设置,去掉句点。这是用作数据库中移动服务表的 SQL 模式名称的值。它不能有句点或其他特殊字符。

    我通常会尝试将此名称与我将部署到的移动服务的名称相同,但这在技术上不是必需的。

    【讨论】:

    • 不真实!非常感谢。我整天都在创建、重新创建和测试,但无法弄清楚这个错误是什么。他们确实应该阻止您在 webconfig 中添加句点或至少清除服务名称的值。
    • 您好,我测试了它并且确实有效!非常感谢你的回答!如果像 jmichas 所说的那样,它们会阻止您放置期间...
    【解决方案2】:

    无论出于何种原因,我无法使用已接受的答案来完成这项工作。我认为这与 web.config 中的免责声明有关:

    发布到移动服务后,这些设置将被门户中指定的值覆盖。

    但是,我确实在 MobileServiceContext 文件中找到了另一个解决方法,我替换了这一行:

    string schema = ServiceSettingsDictionary.GetSchemaName();
    if (!string.IsNullOrEmpty(schema))
    {
        modelBuilder.HasDefaultSchema(schema);
    }
    

    带有一个简单的字符串值modelBuilder.HasDefaultSchema('mySchema');

    我想有一种方法可以影响GetSchemaName() 的输出,但是考虑到解决这个问题需要付出多少努力,我现在完全满足于这个解决方案。

    【讨论】:

    • 仅供参考,昨天安装 Azure SDK 更新并重新部署我的移动服务应用程序后,我开始在我的数据库中获取重复的表。除了HasDefaultSchema 调用中指定的架构之外,我在dbo 架构中也有相同的表;甚至__MigrationHistory 表也被复制了。目前,我已删除 HasDefaultSchema 调用并接受默认的 dbo
    【解决方案3】:

    如果您已更改配置中的 MS_MobileServiceName 以删除句点,但仍然出现错误,则需要在包管理器控制台中重新运行初始迁移的脚手架:

    添加-迁移初始-强制

    据我所见,脚手架会生成一个嵌入的 .resx,它仍然具有您的旧架构名称 (DefaultSchema),以及一个在设计器代码中引用的快照 (Target)。只是更改 DefaultSchema 并没有解决我的问题,但重新运行脚手架可以。

    我还在我的模型中添加了表格注释,但我认为这不是问题所在。如果您的服务已经上线,则可能并不理想。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      相关资源
      最近更新 更多