Как добавить атрибут RowVersion в класс EF4 - PullRequest
5 голосов
/ 05 апреля 2010

Я использую EF4 и создаю классы через область проектирования Entity, а затем генерирую из них базу данных. Я хочу добавить атрибут к некоторым классам, чтобы показать метку времени, когда они последний раз обновлялись.

Я добавил к ним атрибут Version, но я не знаю, какой тип данных .Net связать с ними, чтобы они стали либо меткой времени, либо RowVersion в базе данных при его создании.

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 05 августа 2011

Вы используете 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; }              
}
3 голосов
/ 19 апреля 2011

Насколько я знаю, инверсия строк - это относительное двоичное значение, а не фактическое значение времени. Он увеличивается для каждой вставки и обновления, которые происходят. Это позволяет сравнивать значения, чтобы определить, какая запись новее. Поскольку оно является относительным, при одном значении версии строки вы ничего не будете знать, но при наличии двух значений версии строки вы будете знать, какой из них старше, а какой - новее, но не на сколько.

Я не знаю, какой тип данных .Net связать с ними, чтобы они стали либо меткой времени, либо RowVersion в базе данных при его создании.

Я не уверен, но, скорее всего, не существует типа данных, который обеспечил бы вам обращение строк при переходе от модели к базе данных. Вам придется изменить тип поля базы данных самостоятельно или добавить поле в базу данных и перенести запись в вашу модель. Вы также можете сгенерировать DDL и затем изменить его перед созданием с ним БД.

Существует также другой метод, в котором вы можете расширить функциональность процесса EF, наследуя его классы. Затем вы можете выбрать его самостоятельно, но я не слишком хорошо знаю, как это сделать.

...