I am trying to use Code-First EF6 with default SQL values.
For example, I have a "CreatedDate" column/property not null with a default in SQL of "getdate()"
How do I represent this in my code Model? Currently I have:
<DatabaseGenerated(DatabaseGeneratedOption.Computed)> Public Property CreatedDate As DateTime
Will this work, or will I need to use a nullable even though the actual column should be not null, so EF doesn't send a value when it hasn't been set:
<DatabaseGenerated(DatabaseGeneratedOption.Computed)> Public Property CreatedDate As DateTime?
Or is there a better solution out there?
I don't want EF to handle my defaults - I know this is available to me but not possible in my current situation.
Currently in EF6 there is not an attribute to define database functions used for a certain property default value. You can vote on Codeplex to get it implemented:
https://entityframework.codeplex.com/workitem/44
The accepted way to implement something like that is to use Computed
properties with Migrations
where you specify the default database function.
Your class could look like this in C#:
public class MyEntity { [Key] public int Id { get; set; } public string Name { get; set; } [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public DateTime Created { get; set; } }
The computed property doesn't have to be nullable.
Then you have to run a migration and modify it by hand to include the default SQL function. A migration could look like:
public partial class Initial : DbMigration { public override void Up() { CreateTable( "dbo.MyEntities", c => new { Id = c.Int(nullable: false, identity: true), Name = c.String(), Created = c.DateTime(nullable: false, defaultValueSql: "GetDate()"), }) .PrimaryKey(t => t.Id); } public override void Down() { DropTable("dbo.MyEntities"); } }
You will notice the defaultValueSql function. That is the key to get the computation working
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With