简体   繁体   中英

How does Entity Framework handle Default constraints in the database table?

I am working on code which I cannot run until it's finished, as it is a long and tedious process to go through. I have been tasked to add a new table to the existing database, update the .edmx of the model and write a method to add new rows to the table through c# backend code.

In my situation, I have 2 default constraints on my table

SomeTable
------------
ID INT IDENTITY (1,1) PRIMARY KEY CLUSTERED,
SomeDate DATETIME2 NOT NULL DEFAULT GETDATE(),
SomeOtherField VARCHAR(1024) NOT NULL DEFAULT ''

Using the .edmx model of this table, I set SomeDate's StoreGeneratedPattern to Computed . I also manually double-checked it in the SSDL to ensure the computed StoreGeneratedPattern attribute was on the SomeDate Field in the SomeTable entity.

As far as I know, and are unsure of, when I have a the following code

public void AddSomeRow(...)
{
    SomeDbContext context = new SomeDbContext;
    var table = new SomeTable { SomeOtherField = "Value" };
    context.SomeTables.Add(table);
    context.SaveChanges();
}

I believe the SomeDate Field will be set to it's default constraint (because it hasn't been populated in the entity). Is this true ?

Doing the same steps listed above for SomeOtherField , can I still manually give it a value (the value appearing into that field instead of the Default Constraint) or omit it (The default constraint will be set into that field)?

This question was hard to explain, I apologize if it doesn't make sense

The StoreGeneratedPattern implies that the value is always generated by the DB, so that you're not allowed to modify it. Ie it only makes sense for DB computed columns.

At least until EF 6.1 there is no direct way to support DB defaults. The only thing that you can do is move the default values out of the DB and generate them in the model (or code first) side. You'll find some work-aounds but they're not safe for some cases (specially for N-tier apps).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM