【发布时间】:2016-01-11 13:56:34
【问题描述】:
我正在使用Entity Framework 创建一个MVC mobile application service
我创建了一个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无效的列名 >'Version'。\r\n无效的列名 'CreatedAt'。\r\n无效的列 名称 'UpdatedAt'。",
查看EntityData 类,我可以看到这些是EntityData 类的属性:
public abstract class EntityData : ITableData
{
protected EntityData();
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Index(IsClustered = true)]
[TableColumn(TableColumnType.CreatedAt)]
public DateTimeOffset? CreatedAt { get; set; }
[TableColumn(TableColumnType.Deleted)]
public bool Deleted { get; set; }
[Key]
[TableColumn(TableColumnType.Id)]
public string Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
[TableColumn(TableColumnType.UpdatedAt)]
public DateTimeOffset? UpdatedAt { get; set; }
[TableColumn(TableColumnType.Version)]
[Timestamp]
public byte[] Version { get; set; }
}
所以生成的查询是
'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]''
这显然是查询失败的原因。
是否可以排除这些默认的EntityData 列,因为它们不在我的表中Regions?
【问题讨论】:
-
请务必注意,ITableData 提供的字段是支持 Azure 移动客户端 SDK 所必需的。版本用于支持 ETag。 UpdatedAt & Version 用于支持离线同步功能,Deleted 用于支持多客户端离线同步场景中的软删除功能。如果删除这些字段,则无法使用 Azure 移动客户端 SDK。将服务设置为使用“动态架构”将为您将字段重新添加到您的数据库中。
-
@AdrianHall 感谢您的评论。我实际上正在使用 Azure 移动客户端 SDK。所以你提到它是一件非常好的事情。我将如何设置服务以使用
Dynamic Schema?
标签: c# asp.net asp.net-mvc entity-framework azure-mobile-services