我正在使用MVC Azure mobile application service
Entity Framework
我创建了Entity Model
,如此:
public class Regions : EntityData
{
public string Id { get; set; }
public string Name { get; set; }
}
我已经创建了一个TableController,所以我通过发出一个get请求来查询:
http://localhost:3000/tables/Regions
这会返回错误说明:
“exceptionMessage”:“无效的列名称'Id'。\ r \ n无效的列名称 '版本'。\ r \ n无效列名'CreatedAt'。\ r \ n无效列名'UpdatedAt'。“,
输出中生成的查询是:
'SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Name] AS [Name],
[Extent1].[Version] AS [Version],
[Extent1].[CreatedAt] AS [CreatedAt],
[Extent1].[UpdatedAt] AS [UpdatedAt],
[Extent1].[Deleted] AS [Deleted]
FROM [dbo].[Region] AS [Extent1]''
所以我的问题是如何将这些列添加到我现有的数据库中,以便我的mobile app service
能够正常工作?
PS。这与我之前提出的here
问题的评论相关联答案 0 :(得分:2)
EntityData对象包含五个必填字段的定义:
[Id] [nvarchar](255) Default (CONVERT([nvarchar](255),newid(),(0))) NOT NULL Primary Key,
[CreatedAt] [datetimeoffset](3) DEFAULT CONVERT([datetimeoffset](3),sysutcdatetime(),(0)) NOT NULL,
[UpdatedAt] [datetimeoffset](3) DEFAULT CONVERT([datetimeoffset](3),sysutcdatetime(),(0)) NOT NULL,
[Version] [timestamp] NOT NULL,
[Deleted] [bit] DEFAULT 0 NULL,
您的id正在覆盖EntityData对象中的定义。此外,您的SQL数据库没有其他必需字段。我假设您没有进行迁移,因此数据库没有使用新定义进行更新。
答案 1 :(得分:2)
如果这是针对新服务的,您不使用现有数据库,创建表及其列(不仅是默认的移动应用列,还有用于支持您定义的模型的列)改变它应该像使用正确的EF数据库初始化策略一样简单。
您会注意到您的服务模板已为您创建了一个数据库初始值设定项,通常名为MobileServiceInitializer
,可以从CreateDatabaseIfNotExists<MobileServiceContext>
继承。
在开发过程中,将初始化程序使用的基类更改为DropCreateDatabaseIfModelChanges<MobileServiceContext>
或DropCreateDatabaseAlways<MobileServiceContext>
(这将完全符合名称所示)将自动更改数据库以匹配您定义的模型(包括默认列。)
这应该会在开发过程中为您提供所需的内容,但如前所述,更长远的解决方案是采用EF迁移。您可以在此处了解详情:http://msdn.microsoft.com/en-us/data/jj591621.aspx
此外,正如Adrian所提到的,您的Region类正在定义Id属性,隐藏 EntityData提供的实现并可能导致问题,因此建议删除它。
我希望这有帮助!