我正在使用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