Entity Framework 5: Using DatabaseGeneratedOption.Computed option
ef-code-first, entity-framework-5
Solution
Apparently, no there isn't. It's not that smart :)
As you may already read, Computed option just tells the EF not to update your column, because you will compute a value on the DB-side yourself. EF will then just return newly computed value from your database (which in your case is "Not Set").
Your basic three options are - as per EF Source code documentation:
- None - The database does not generate values.
- Identity - The database generates a value when a row is inserted.
- Computed - The database generates a value when a row is inserted or updated.
https://github.com/aspnet/EntityFramework6/blob/527ae18fe23f7649712e9461de0c90ed67c3dca9/src/EntityFramework/DataAnnotations/Schema/DatabaseGeneratedOption.cs
Since you expect a little more custom logic to be done, I'm afraid you would have to do it yourself. I would suggest you stop relying on database default constraint and do everything in code first approach. This way you would have a code like that:
public class Vehicle
{
public Vehicle()
{
this.Name = "Not set";
}
// Without 'Generated' attribute
public string Name { get; set; }
}
This way, when your Entity is created, it automatically starts with expected default value. And can be later changed by simply modifying the Name property.
Hope it helps!
Problem
I have an EF5 code first project that uses the `[DatabaseGenerated(DatabaseGeneratedOption.Computed)]` attribute. This option is overriding my settings. Consider this SQL table: ``` CREATE TABLE Vehicle ( VehicleId int identity(1,1) not null, Name varchar(100) not null default ('Not Set') ) ``` I am using the SQL default construct to set the [Name] is case it is not set. In code behind, I have a class defined similar to: ``` public class Vehicle { ... [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public string ShoulderYN { get; set; } } ``` When I update the entity in code, the value set in the default overrides my new setting. In code, I have (pseudo): ``` vehicle.Name = 'Update Name of Vehicle'; _dbContext.Update(vehicle); _dbContext.SaveChanges(); ``` The expected result is `Vehicle.Name = 'Update Name of Vehicle'`. The actual result is `Vehicle.Name = 'Not Set'`. Is there a way in EF5 to say: if Vehicle.Name is null/empty, use the value defined in the database? Otherwise, if I set the value in code, I want to use this value.