0

我创建一个MVC mobile application serviceEntity Framework如何忽略默认的EntityData属性?使用

我已经创建了一个Entity Model像这样:

http://localhost:3000/tables/Regions 

public class Regions : EntityData 
{ 
    public string Id { get; set; } 

    public string Name { get; set; } 
} 

,我创建了一个TableController所以我通过一个GET请求来查询

返回错误说:

“exceptionMessage”:“无效的列名'Id'。\ r \ n列名无效>'Version'。\ r \ n列名无效'CreatedAt'。\ r \ n列无效 name'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

+2

请务必注意,ITableData提供的字段必须支持Azure Mobile客户端SDK。版本用于支持ETag。 UpdatedAt&Version用于支持脱机同步功能,Deleted用于支持多客户端脱机同步场景中的软删除功能。如果您删除这些字段,则无法使用Azure移动客户端SDK。将服务设置为使用“Dynamic Sc​​hema”会将字段添加回数据库中。 –

+0

@AdrianHall感谢您的评论。我实际上使用Azure移动客户端SDK。所以你提到它是一件非常好的事情。我将如何设置服务以使用“动态模式”? – user1

回答

4

首先,你需要隐藏基类重点新属性:

public new DateTimeOffset? CreatedAt { get; set; } 

然后添加属性[NotMapped]

[NotMapped] 
public new DateTimeOffset? CreatedAt { get; set; } 

最后的结果是:

public class Regions : EntityData 
{ 
    public string Id { get; set; } 

    public string Name { get; set; } 

    [NotMapped] 
    public new DateTimeOffset? CreatedAt { get; set; } 

    [NotMapped] 
    public new DateTimeOffset? UpdatedAt { get; set; } 

    [NotMapped] 
    public new byte[] Version { get; set; } 
} 

我不知道在这种情况下你想如何处理id。如果您需要隐藏基类属性,请在输入前添加新的。

+0

只是为了澄清我会隐藏基类属性并将其标记为'[NotMapped]'你能否用我的'Regions'类隐藏一个属性做一个快速示例? – user1

+1

完成。我希望它很清楚 – erikscandola