实体框架代码首先是额外的列

时间:2016-12-10 04:17:34

标签: c# entity-framework azure ef-code-first azure-mobile-services

我已经离开了C#并开发了一段时间,所以请耐心等待。

如下所示拥有实体类List

public class List : EntityData
{
    public int ListId { get; set; }
    public string Name { get; set; }
    public string UserId { get; set; }

    public virtual List<ListItem> ListItems { get; set; }
}

但是创建的相应表使用此DDL和额外的列。为什么呢?

CREATE TABLE [dbo].[Lists] 
(
    [Id]        NVARCHAR (128)     DEFAULT (newid()) NOT NULL,
    [ListId]    INT                NOT NULL,
    [Name]      NVARCHAR (MAX)     NULL,
    [UserId]    NVARCHAR (MAX)     NULL,
    [Version]   ROWVERSION         NOT NULL,
    [CreatedAt] DATETIMEOFFSET (7) DEFAULT (sysutcdatetime()) NOT NULL,
    [UpdatedAt] DATETIMEOFFSET (7) NULL,
    [Deleted]   BIT                NOT NULL,

    CONSTRAINT [PK_dbo.Lists] PRIMARY KEY NONCLUSTERED ([Id] ASC)
); 

2 个答案:

答案 0 :(得分:3)

它们不是额外的,而是由Microsoft.Azure.Mobile.Server.EntityData定义的。

这些额外的字段用于

  

ITableData接口的抽象实现,指示在使用Entity Framework访问后端存储时与客户端通信时如何序列化给定表数据模型的系统属性。系统属性的统一序列化可确保客户端可以跨平台统一处理系统属性。具体实体框架模型可以从此基类派生,以支持系统属性。

答案 1 :(得分:0)

您的基类&#39; EntityData&#39;要么实现了ITableData接口,要么它有自己的属性,如ITableData。 所以你的代码EntityData类看起来像这样

public class EntityData : ITableData
{
    public DateTimeOffset? CreatedAt { get; set; }

    public bool Deleted { get; set; }

    public string Id { get; set; }

    public DateTimeOffset? UpdatedAt { get; set; }

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

从List模型类中删除继承基类(EntityData)时,您不会获得额外的列。