我正在使用EF4并通过Entity设计界面创建类,然后从中生成数据库。我想为某些类添加一个属性,以显示它们上次更新的时间戳。
我已经为它们添加了一个Version属性,但是我不知道与它们关联哪个.Net数据类型,因此它们在生成时会成为数据库中的Timestamp或RowVersion。
有什么想法吗?
答案 0 :(得分:4)
您使用byte[]
类型进行rowversion / timestamp
使用示例:http://www.ienablemuch.com/2011/07/using-checkbox-list-on-aspnet-mvc-with_16.html
如果您在设计师中,只需键入byte[]
或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; }
}
答案 1 :(得分:3)
据我所知,rowversion是一个相对二进制值,而不是实际时间值。它会针对每次发生的插入和更新而递增。这允许您比较值以确定哪个记录更新。由于它是相对的,给定一个rowversion值,你什么都不知道,但是给定两个rowversion值,你会知道哪个更旧,哪个更新,但不是多少。
我不知道与它们关联哪个.Net数据类型,因此它们在生成时会成为数据库中的Timestamp或RowVersion。
我不确定,但很可能没有一种数据类型可以在从模型转到数据库时为您提供rowversion。您必须自己更改数据库字段类型,或将字段添加到数据库并将记录添加到模型中。您也可以生成DDL,然后在使用它创建数据库之前对其进行修改。
还有另一种方法可以通过派生类来扩展EF流程的功能。然后你可以自己选择,但我不太熟悉如何做到这一点。