我正在使用EF4并通过Entity设计表面创建类,然后从它们生成数据库。我想为某些类添加一个属性来显示它们上次更新的时间戳。如何添加RowVersion属性到EF4类
我已经为它们添加了一个版本属性,但我不知道要与它们关联哪个.Net数据类型,以便它们在数据库中生成时变为时间戳或RowVersion。
任何想法?
我正在使用EF4并通过Entity设计表面创建类,然后从它们生成数据库。我想为某些类添加一个属性来显示它们上次更新的时间戳。如何添加RowVersion属性到EF4类
我已经为它们添加了一个版本属性,但我不知道要与它们关联哪个.Net数据类型,以便它们在数据库中生成时变为时间戳或RowVersion。
任何想法?
您使用byte[]
类型rowversion /时间戳
使用例: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; }
}
呃哦,我正在回答去年的问题:D – 2011-08-05 00:27:53
据我所知,rowversion是一个相对的二进制值,而不是实际的时间值。对于发生的每个插入和更新都会增加。这允许您比较值以确定哪个记录更新。既然它是相对的,给定一个单一的rowversion值,你什么都不会知道,但是如果给出两个rowversion值,你就会知道哪个更老,哪个更新,但不知道多少。
我不知道要与它们关联哪个.Net数据类型,以便它们在生成时变为数据库中的Timestamp或RowVersion。
我不确定,但最有可能没有一个数据类型,可以让你从模型到数据库时的rowversion。您必须自己更改数据库字段类型,或将该字段添加到数据库并将记录提交给您的模型。您也可以生成DDL,然后在使用它创建数据库之前对其进行修改。
还有另一种方法,您可以通过派生它的类来扩展EF过程的功能。你可以自己选择它,但我不太熟悉如何做到这一点。
当你走另一条路(DB - >模型)的类型是'字节[]'(代码)和“二进制”(在EDMX中)。 – 2010-04-07 20:51:47
@Craig - 当你从模型中重新生成数据库时,时间戳列会变成二进制列,并且你失去了我正在寻找的行为。 – 2010-04-08 10:49:54
要明确一点,SQL Server'TIMESTAMP'根本不是时候。这是你想要的,还是你想要一个时间?我假设你想要一个'TIMESTAMP',这确实是二进制的。 – 2010-04-08 12:07:10