5

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

我已经为它们添加了一个 Version 属性,但我不知道与它们关联的 .Net 数据类型,因此它们在生成时成为数据库中的 Timestamp 或 RowVersion。

有任何想法吗?

4

2 回答 2

4

您将byte[]type 用于 rowversion/timestamp

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

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

鉴于此 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; }              
}
于 2011-08-05T00:19:46.373 回答
3

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

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

我不确定,但很可能没有一种数据类型可以在从模型到数据库时为您提供行版本。您必须自己更改数据库字段类型,或者将字段添加到数据库并将记录带到您的模型中。您还可以生成 DDL,然后在使用它创建数据库之前对其进行修改。

还有另一种方法,您可以通过从其类派生来扩展 EF 进程的功能。然后你可以自己选择它,但我不太熟悉如何做到这一点。

于 2011-04-19T16:59:25.827 回答