2013-06-07 2 views
2

меня ниже лица с рассчитанным/вычисляемый столбец:Entity Framework 4.1 Code First - Рассчитано/Рассчитано столбец не вставляется

public EntityA 
{ 
    [Key(), Required] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    ..... 

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)] 
    public virtual string RefId { 
     get 
     { 
      return this.Id.ToString().PadLeft(7, '0'); 
     } 

     private set 
     { 
     } 
    } 
} 

RefId является вычисляемый столбец, который зависит от значения Id.

После выполнения изменений в базе данных с помощью SaveChanges я могу проверить правильность установки идентификатора и RefId для объекта, который я сейчас вставляю в базу данных, но если я открою базу данных и проведу столбец RefId для этого объекта, я могу наблюдать что столбец RefId не установлен, если цифры равны NULL. Зачем? Есть идеи?

ответ

4

DatabaseGeneratedOption.Computed означает, что это значение вычисляется механизмом базы данных. Таким образом, EF никогда не будет обновлять это значение, только чтение из db.

Так что, если вы хотите, чтобы это значение в БД: - удалить DatabaseGeneratedOption.Computed и установить значение в коде, или - установить вычисляемый столбец на стороне двигателя базы данных.

В противном случае вы должны установить RefId как не отображаемый. Но в этом случае у вас не будет столбца в db.

+0

Это приведет к ошибке, если вы не можете обновить объект, где база данных имеет вычисленный столбец. – jwize

Смежные вопросы