代码之家  ›  专栏  ›  技术社区  ›  Colin Desmond

如何向EF4类添加RowVersion属性

  •  5
  • Colin Desmond  · 技术社区  · 16 年前

    我使用EF4并通过实体设计图面创建类,然后从中生成数据库。我想给一些类添加一个属性,以显示它们上次更新的时间戳。

    2 回复  |  直到 16 年前
        1
  •  4
  •   Michael Buen    15 年前

    你用 byte[] 行版本/时间戳的类型

    示例用法: http://www.ienablemuch.com/2011/07/using-checkbox-list-on-aspnet-mvc-with_16.html

    如果在设计器中,只需输入 字节[] 或 System.Byte[] ,我认为EF designer上的字段类型下拉选择可以输入。

    考虑到这个DDL

    create table Movie
    (
    MovieId int identity(1,1) not null primary key,
    MovieName varchar(100) not null unique,
    MovieDescription varchar(100) not null unique,
    YearReleased int not null,
    Version rowversion  -- rowversion and timestamp are alias of each other
    );
    

    这是类映射:

    public class Movie
    {
        [Key]
        public virtual int MovieId { get; set; }
         
        [   Required, Display(Name="Title")
        ]   public virtual string MovieName { get; set; }
         
        [   Required, Display(Name="Description")
        ]   public virtual string MovieDescription { get; set; }
         
        [   Required, Display(Name="Year Released"), Range(1900,9999)
        ]   public virtual int? YearReleased { get; set; }
         
        [Timestamp]
        // byte[] is the rowversion/timestamp .NET type
        public virtual byte[] Version { get; set; }  
     
         
        public virtual IList<Genre> Genres { get; set; }              
    }
    
        2
  •  3
  •   Dave Cousineau    15 年前

    据我所知,rowversion是一个相对的二进制值,而不是实际的时间值。每次插入和更新都会增加。这允许您比较值以确定哪个记录较新。因为它是相对的,给定一个rowversion值,您将什么都不知道,但是给定两个rowversion值,您将知道哪个旧,哪个新,但不知道是多少。

    我不知道要将哪个.Net数据类型与它们关联,因此它们在生成时会成为数据库中的Timestamp或RowVersion。