2009-10-15 8 views
6

czy ktoś wie, w jaki sposób mogę ustawić mapowanie wartości domyślnej kolumny, np. kiedy generuję DB z mapowań miałbym kolumna DateTime o getdate() jako wartość domyślna?FluentNHibernate - ustawienie wartości domyślnej dla kolumn DB (SQL Server)

Próbowałem tak daleko to (jak wygląda exactlly czego potrzebuję), ale to nie działa

this.Map(x => x.LastPersistedOn, "DateModified") 
    .Access.Property() 
    .Default("getdate()"); 
+0

mam takie same wydanie w płynnym 1.0 i nie ma se em to rozwiązanie - możesz to zrobić poprzez wydarzenia, ale nie zawsze jest to właściwe. Ktoś jeszcze? – row1

+0

możliwy duplikat [NHibernate + domyślna kolumna getdate()] (http://stackoverflow.com/questions/1145197/nhibernate-default-getdate-column) –

Odpowiedz

6

właśnie próbowano ustawienie domyślne pewne wartości i to działało jak oczekiwano. Używam Fluent do pobrania z Git 24.05.2010, więc uaktualnienie Twojej kopii może rozwiązać Twój problem.
Mapowanie

public class SampleEntity 
{ 
    public virtual DateTime DateTimeProperty { get; set; } 
} 

Z

public class SampleEntityMap 
     : ClassMap<SampleEntity> 
{ 
    public SampleEntityMap() 
    { 
    Map(x => x.DateTimeProperty, "DateTimeColumn") 
      .Access.Property() //actually not necessary 
      .Not.Nullable() 
      .Default("getDate()"); 
    } 
} 

to przyniesie następujące sql (od wyjścia do konsoli)

create table SampleEntity(
    DateTimeColumn DATETIME default getDate() not null 
) 

-
Dom

4

Droga do tego celu jest przypisanie bieżącego DateTime w kodzie zamiast używać wartości domyślnej w Baza danych. Następnie traktuj to jako normalną kolumnę. Wydawało mi się nieco dziwne, początkowo pochodząc z tła projektowania opartego na modelu, ale zarządzanie wartościami domyślnymi na poziomie POCO jest metodą DDD, aby to zrobić.

Byłoby dobrze, aby usłyszeć opinie innych osób zbyt

+1

Problem z tym związany zależy od zegara użytkowników. Jeśli nie jesteś użytkownikiem końcowym, jeśli twoja aplikacja działa w dwóch różnych strefach czasowych, to jest już wystarczająco skomplikowana. – hometoast

+0

Coś innego do przemyślenia to istniejące dane. Wiem, że jest to stary post, ale jeśli dodajesz nowe pole do istniejącej klasy/tabeli/mapy, nie zawsze chcesz, aby wartość domyślna była tym, co normalnie byłby defualt (na przykład kolumna boolowska, którą chcesz wartość domyślna jest prawdziwa we wszystkich istniejących rekordach) – DevTheo