Šodien saskāros ar diezgan interesantu problēmu - kā izdarīt tā, lai saglabājot datus datu bāzē, izmantojot Entity Framework, nenorādot konkrētas kolonas vērtību, tai tiktu piešķirta vērtība pēc noklusējuma, kas ir definēta datu bāzē, nevis tiek paņemta konkrētā tipa vērtība pēc noklusējuma?
Piem.,
mums datu bāzē ir definēta šāda tabula:
CREATE TABLE DEAL(
[ID] [bigint] NOT NULL,
[NAME] [varchar](50) NOT NULL ,
[MIN_AMOUNT][bigint] DEFAULT (1),
[DATE] [datetime] NOT NULL);
Kods, lai saglabātu DEALS objektu datu bāzē ir apmēram šāds:
using (var cnt = new Context())
{
DEAL deal = new DEAL();
deal.NAME = "The new Deal";
cnt.DEAL.AddObject(deal);
cnt.SaveChanges();
}
Taču pēc tam, apskatoties datu bāzē, lai gan es kodā nebiju norādījusi MIN_AMOUNT vērtību, MIN_AMOUNT ir 0 (kas ir tipa vērtība pēc noklusējuma) nevis 1 (kā ir definēts datu bāzes līmenī).
Izrādās, ka risinājums ir pavisam vienkāršs... Vietā, kur notiek DB kolonu mapošana uz objektiem, ir nepieciešams pamainīt dažus uzstādījumus.
Ir nepieciešams uzlikt StoreGeneratedPattern uz Computed.

Un nākošo reizi, kad tiks saglabāti dati datu bāzē MIN_AMOUNT, kolonai tiks piešķirta vērtība pēc noklusējuma, kas ir definēta datu bāzē.
Cerams, ka noderēs :)
![]()