更新了 Table 使用 ASP.NET Web API2 服务查询时返回错误

Updated Table Returning Error When Query with ASP.NET Web API2 Service

我正在开发 WindowsPhone 8.1 应用程序,我有一个 SQL 数据库连接到托管在 Azure 网站上的 Web API 服务器。最近,数据库人更新了数据库,增加了一个新的table,并在table中添加了样本数据。通过 Azure 管理数据库时,我可以看到所有 table 中都有数据,但是当我尝试使用 /api/entityname url 检索它们时,它 returns一条错误消息。

有几点需要注意,服务器连接的数据库自从我最初发布它以来已经发生了变化。我再次尝试 运行 启用迁移和更新数据库命令,但我不知道如何 select 现在连接的新数据库。我需要重新发布服务器吗? 运行 新数据库的迁移命令?我对自己尝试涉及数据库连接的事情犹豫不决,因为我对此了解不多,也不想弄乱任何配置。我有一个 .NET 后端。在此先感谢您的帮助。

更新:

我进入我的服务项目的 Web.Config 文件并将连接字符串中的目录值更改为我的新数据库的名称。现在,当我尝试使用 /api/teams 扩展名获取游戏值时出现以下错误:

An error has occurred.The 'ObjectContent1' type failed to serialize the response body for content type 'application/xml; charset=utf-8'.</ExceptionMessage><ExceptionType>System.InvalidOperationException</ExceptionType><StackTrace/><InnerException><Message>An error has occurred.</Message><ExceptionMessage>The 'GameTime' property on 'Game' could not be set to a 'System.TimeSpan' value. You must set this property to a non-null value of type 'System.Byte[]'. </ExceptionMessage><ExceptionType>System.InvalidOperationException</ExceptionType><StackTrace> at System.Data.Entity.Core.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader1.GetValue(DbDataReader reader, Int32 ordinal) at System.Data.Entity.Core.Common.Internal.Materialization.Shaper.GetPropertyValueWithErrorHandling[TProperty](Int32 ordinal, String propertyName, String typeName) at lambda_method(Closure , Shaper ) at System.Data.Entity.Core.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)<br> at lambda_method(Closure , Shaper ) at System.Data.Entity.Core.Common.Internal.Materialization.Coordinator1.ReadNextElement(Shaper shaper) at System.Data.Entity.Core.Common.Internal.Materialization.Shaper1.SimpleEnumerator.MoveNext() at System.Data.Entity.Internal.LazyEnumerator1.MoveNext() at WriteArrayOfGameToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , CollectionDataContract ) at System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle) at System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.DataContractSerializer.WriteObject(XmlWriter writer, Object graph) at System.Net.Http.Formatting.XmlMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, HttpContent content) at System.Net.Http.Formatting.XmlMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken) --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at System.Web.Http.WebHost.HttpControllerHandler.d__1b.MoveNext()

我认为我正在取得一些进展,但我在将应用程序连接到数据库方面不是很有经验,所以我犹豫要不要四处看看。在此先感谢您的帮助。我正在使用数据优先迁移(来自数据库的 EF Designer)。此外,仅当我通过 localhost 在本地 运行 服务时才会显示上述错误消息。当我 运行 通过它托管的 azurewebsites url 时,我得到以下信息:

发生错误。

我认为这是因为我的数据库更新没有发布到托管站点,对吗?我使用 Firefox 作为我的浏览器。如果我使用 IE,我无法下载或打开新实体的 JSON 文件。

在朋友的帮助下,我设法解决了这个问题。万一有人遇到这个 post ,问题是由于数据库和服务器的数据对象之间的数据类型冲突。可以在 https://msdn.microsoft.com/en-us/library/cc716729%28v=vs.110%29.aspx 找到 C# 和 SQL 服务器之间的数据类型映射列表。根据链接的图表匹配数据类型,并确保注释中包含任何其他数据库约束(即:必需等)。此外,请确保更新服务器上下文文件中的所有代码以匹配数据类型更改。例如,我的 OnModelCreating 方法中有以下代码:

modelBuilder.Entity<Game>()
            .Property(e => e.GameTime)
            .IsFixedLength();

一旦我将 GameTime 更改为 DateTime 属性,.IsFixedLength();不再适用于它,所以我不得不将其注释掉。当您进行这些更改时,您可以通过在本地调试您的服务器来测试它们,但您必须将其发布回其托管的 url 以查看远程服务器上发生的更改。就我而言,我不得不重新发布我的 azurewebsites.net 网站。我希望这可以帮助任何有类似问题的人。